2011-06-23 4 views
0

私はandroid devが新しく、起動時に次のコードがループを開始し、接続の結果を確認し、1の場合に振動してから5分間スリープするかどうか疑問に思っていましたか?Androidの新機能、起動時にこのループが発生しますか?

/** 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

振動子.Vibrate ... – bouvierr

+0

振動の10ミリ秒... OH YEAH – Takkun

答えて

1

うん、それはループします。アンドロイドプロセスマネージャーがあまりにも長い間それを生き続けるとは期待しないでください。また、whileループを何度も繰り返し実行することで、たくさんのランナブルがポストされます。

1

このコードは、onCreate()が許容時間内に返されないため強制的に終了します。 onCreate()からスレッドを開始することはできますが、永遠にハングアウトすることはできません。

whileループを失い、postDelayed()だけが失われます。あなたの実行可能ファイルは、その中でループすることができます(あなたが終了させる方法をあなたに伝える限り!)。

あなたは文字列が等しいかどう==演算子で行われていない文字列をチェックし、あなたが記述している何のためにしているのでやり過ぎであることから、ブールまたは少なくともint型、変数foundblock(とあなたのconnect()関数の戻り)を変更する場合があります。

+0

whileループをRunnable内に移動すると、各繰り返し後に5分間スリープさせるにはどうすればよいですか? – Takkun

1

onCreateに時間制限があるため、クラッシュします。ループを別のスレッドに置くと、アプリケーションがクラッシュするのを止めます。 例:

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(); 

これは間違いなく、その後の睡眠にこのスレッドを置くのではなく、作品は、ちょうどあなたが()再びmyThread.startを呼び出すことによって、合格した待機する時間後にそれを再起動します。

+0

その起動は起動時に終了します。 – Takkun

+0

上記のコードを修正しました。申し訳ありません - 投稿する前にコンパイル済みであることを確認してください! – Kenny