2011-06-23 37 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

振動器振動... – bouvierr

+0

振動10毫秒... OH YEAH – Takkun

回答

1

是的,它會循環。不要指望android進程管理器保持它活得太久。它還會導致大量的可運行內容被髮布,因爲它會反覆遍歷while循環。

1

由於onCreate()沒有在可接受的時間限制內返回,因此此代碼將被強制終止。你可以從onCreate()開始一個線程,但你不能永遠掛出。

丟失while循環,只是postDelayed()。你的runnable可以在它內部循環(只要你給自己一種被告知終止它的方法!)。

你可能會改變變量foundblock(和你的connect()函數的返回)爲boolean或至少一個int,因爲字符串是矯枉過正你描述和自字符串檢查平等不與==運營商進行。

+0

如果我移動Runnable內部的while循環,如何在每次迭代後讓它睡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