總網頁瀏覽量

2013年4月10日 星期三

android Tiemrtask

除了extends Thread 、implement Runnable之外
也可以用timertask物件啟動執行緒

並且可以採用Button按下去會執行多個執行緒


在一般java swing可以直接在thread 的run()中直接操控UI
但是在android不行
必須裡用handler傳遞message操控UI


private Timer timer;
pirvate MyHandler handler;
timer.schedule(timertask,什麼時候執行,執行時間長度);





private void Click3(){
timer = new Timer();
// timer.schedule(task, when, period)
timer.schedule(new MyTask(),0,1000);
//第零秒後執行my task物件,持續執行一千秒,每秒執行一次
}

private class MyTask extends TimerTask{
int i;
@Override
public void run() {
Log.i("YYP","i = "+i++);
// tv.setText("i = "+i++);
//在android裡面thread不可以直接操控UI否則會出現
//04-10 23:31:45.967: W/dalvikvm(399): threadid=7: thread exiting with uncaught exception (group=0x4001d800) 04-10 23:31:46.009: E/AndroidRuntime(399): FATAL EXCEPTION: Timer-0 //04-10 23:31:46.009: E/AndroidRuntime(399): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 

//要操控UI必須用handler物件傳遞Message
handler.sendEmptyMessage(i++);
//handler.sendEmtyMessage(what);
}
}

//handler必須宣告,UI所在的activity之中。
private class MyHandler extends Handler{

//reciev Message
@Override
public void handleMessage(Message msg) {
tv.setText("i="+msg.what);
}


}

//activity結束時,取消timer物件執行緒
//否則activity結束後timer物件仍會持續執行
public void finish(){
timer.cancel();
timer=null;
super.finish();


}

沒有留言:

張貼留言