2011-06-23 4 views
0

Je suis nouveau à android dev et je me demandais si, au démarrage, le code suivant va commencer à faire une boucle, vérifier le résultat de se connecter, vibrer si 1, puis dormez pendant 5 minutes?Nouveau sur Android, cette boucle au démarrage?

/** Called when the activity is first created. */ 
boolean flag = true; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    while(flag) { 
     Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      public void run() { 
       String foundblock = connect("blahblahblah"); //will return either 0 or 1 
       if (foundblock == "1") { 
        Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
        long milliseconds = 10; 
        v.vibrate(milliseconds); 
        flag = false; 
       } 
      } 
     }, 300000); 
    } 
+0

Vibrateur.Vibrate ... – bouvierr

+0

10 millisecondes de vibration ... OH YEAH – Takkun

Répondre

1

Ouais, ça va tourner. Ne vous attendez pas à ce que le gestionnaire de processus android le garde en vie trop longtemps. Il en résultera également la publication d'une tonne de runnables, qui traverseront la boucle while encore et encore.

1

Ce code sera définitivement interrompu car onCreate() ne retourne pas dans un délai acceptable. Vous pouvez démarrer un thread à partir de onCreate() mais vous ne pouvez pas sortir indéfiniment.

Perd la boucle while, et juste postDelayed(). Votre runnable peut boucler dedans (tant que vous vous donnez un moyen d'être dit de le terminer!).

Vous pouvez changer la variable foundblock (et le retour de votre fonction connect()) une valeur booléenne ou au moins un int, puisque chaîne est trop pour ce que vous décrivez et depuis les contrôles de chaîne pour l'égalité ne sont pas effectuées avec l'opérateur == .

+0

Si je déplace la boucle while à l'intérieur du Runnable, comment puis-je la faire dormir pendant 5 minutes après chaque itération? – Takkun

1

Il se bloque car l'onCreate a une limite de temps. Si vous placez la boucle dans un thread séparé, cela empêchera l'application de se bloquer. exemple:

Thread myThread = new Thread(){ 
     public void run(){ 
      while(flag) { 
         int foundblock = connect("blahblahblah"); //will return either 0 or 1 
         if (foundblock == 1) { 
         Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
         long milliseconds = 10; 
         v.vibrate(milliseconds); 
         flag = false; 
         } 
      } 
     } 
    }; 
    myThread.start(); 

Cela fonctionne vraiment, plutôt que de mettre ensuite ce fil pour dormir, juste redémarrer après le temps que vous voulez attendre a passé en appelant myThread.start() à nouveau.

+0

Cette force se ferme au démarrage. – Takkun

+0

J'ai modifié le code ci-dessus. Désolé - aurait dû vérifier compilé avant de poster! – Kenny

Questions connexes