2013-08-02 46 views
0

在這裏,在該定時器代碼runOnUiThread類是未定義的(新的Runnable)在一個延伸視圖類未定義的。這可能在擴展View的類中使用此代碼。runOnUiThread(新的Runnable),在該延伸查看

Timer timer = new Timer(); 
timer.schedule(new TimerTask() { 
public void run() { 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      view.invalidate; 
     } 
    }); 
} 
}, 40); 
+0

它是活性的方法。如果您使用的是activity's背景下膨脹你的看法,你可以施放view's上下文活動 – Blackbelt

+0

http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang .Runnable) – Raghunandan

回答

4

runOnUiThread()是在Activity上的方法。你想要的這裏是post(),這是一個View方法安排一個Runnable主應用程序線程上運行。

比你的另一種方法,一個用更少的開銷,就是:

new Runnable() { 
    public void run() { 
    view.invalidate(); 
    view.postDelayed(this, 40); 
    } 
}.run(); 

這避免了使用TimerTimerTask後臺線程創建的。如果您稍後要取消,要麼有Runnable手錶一些boolean數據成員改變,或者守住RunnableremoveCallbacks()(另一種方法上View)使用它。

+0

但有一個問題,我不能使用postDelayed。 postdelayed所花費的總時間是:執行時間+ 40毫秒我是否正確?我想在40毫秒內完成我的任務。 – user1844130

+0

@ user1844130:你可以用'40-butLongItTook'替代'40'。另外,要記住,這兩個'後()'和'runOnUiThread()'有自己的延遲,因爲他們只是安排你的'Runnable'要在主應用程序線程上運行,並不會立即發生。 – CommonsWare