2013-02-07 20 views
0

好吧,我正在做一個android定時器應用程序不斷崩潰。我使用的計時錶在25分鐘後重置,然後重新開始計時。這是通過啓動按鈕onclicklistener中的for循環完成的。在循環我還有一個while循環中,我由語句在java/android +崩潰的應用程序中的時間

//內部while循環的內容進行循環

while(found==1){ 
       temp = chrono.getBase() + SystemClock.elapsedRealtime(); 
       if(temp == 25*60*1000){ 
        found--; 
       } 

我再乘以1000,因爲時間assing長類型的變量經過時間的價值以毫秒爲單位進行測量?我是做錯了還是別的嗎? 謝謝。

+0

什麼是'found',你初始化了什麼? – Abubakkar

+0

也許加temp> = 25 * 60 * 1000?也許更多的時間已經從你上次檢查以來已經過去了,然後循環永遠不會結束... – BobTheBuilder

+0

發現被初始化爲1,這是因爲while循環在temp等於指定值後中斷,並且因爲while循環在for括號for循環再次啓動。 – user2018473

回答

0

您正在查殺CPU,並且可能永不停止。溫度很可能是25 * 60 * 1000,非常低。將該「==」檢查更改爲「> =」。另外,使用「布爾」來找到:它更有意義。

2

while循環可能會阻塞主UI線程,直到滿足條件found==1。您可能需要的是TimerTimerTask。或者,按照this article中的建議,您可以使用處理程序啓動Runnable,以每50或100毫秒更新計時器時間。下面是一個例子(未測試,並從linked article適於!):

private Handler handler = new Handler(); 
handler.postDelayed(runnable, 100); 

private Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 
     /* do what you need to do */ 
     boolean isTimerReady=foobar(); 
     /* and here comes the "trick" */ 
     if (!isTimerReady) handler.postDelayed(this, 100); 
    } 
}; 

這將啓動foobar()每100毫秒。 foobar()應該返回一個布爾值 - 基本上就是while循環中的計算,並更新用戶界面。一旦foobar()返回true,則Runnable不會重新啓動。

+0

1個問題plz? 爲了找到自秒錶開始以來的時間,我做得很對。 Temp是保持這一點的變量。 – user2018473

+0

取決於'chrono.getBase()'的值。我認爲正確的計算應該是'elapsedRealtime - initialTime'。 – unbehagen

+0

對不起,我無法嘗試此foobar活動?那時。我正試圖實現它,但不知道如何。我想要的是25分鐘後重置天文鐘。我的問題是,這個可運行的時間檢查是什麼? – user2018473