2014-02-13 53 views
0

我正在用TimerTask和Timers以及android測試一些東西,並且我注意到如果我將runo()方法放入了Looper,TimerTask只運行一次,即使我定義它是重複的。任何想法爲什麼是這樣的?當looper在runnable裏面時,repetitve timer不起作用

這裏是在MainActivity部分

Timer timi=new Timer(); 
    timi.scheduleAtFixedRate(new locac(nok,this),10, 1000); 

,這裏是工人的TimerTask類

public void run() 


{ 






    Looper.prepare(); 


    int loto=23; 
       int lato=23; 

    long time=1220227200; 

      String test=String.valueOf(lato); 
      String test3=String.valueOf(loto); 
    String test1=String.valueOf(time); 


    dbadapter mkola=new dbadapter(Ctx); 
    mkola.openToWrite(); 

     mkola.insert(test,test1,test3); 

Looper.loop(); 





} 

,只要我取出活套,它的作品不錯。 我需要的尺蠖,因爲在一個點上我要調用一些方法在其內部啓動處理程序提前

感謝

回答

0

這是因爲你的TimrTask永遠不會返回

(因爲調用Looper.loop()的)形成Timertask文檔,重點煤礦(Oracle文檔,Android的是不是清楚)http://docs.oracle.com/javase/7/docs/api/java/util/Timer.html

對應ing到每個Timer對象是一個單一後臺線程 用於執行所有的計時器的任務,按順序。計時器任務 應該快速完成。如果計時器任務需要花費過多的時間才能完成,它會「佔用」計時器的任務執行線程。這可以在 轉時延遲後續任務的執行,當後續任務()最終完成有問題的任務 時,後續任務可能「聚合」並且快速連續執行。

所以會發生什麼是你的TimerTask在你的計時器的單線程運行,因爲它是run方法永遠不會返回它BLOKS線程,它不能運行TimerTask的新的計劃itereation了。

相關問題