Timer CountdownTimer = new Timer(true);
CountdownTimer.schedule(new CountdownTimerTask(), 1000, 1000);
public class CountdownTimerTask extends TimerTask {
public void run(){
// 做你想做的事
}
};
Google了一下 ~~
原來~~ Android考慮到線程的安全問題,不允許在線程中執行UI線程~~
要利用android.os.Handler來實現各線程間的訊息傳遞~~
public class StartGame extends Activity {
private Handler handler = new Handler();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.startgamepage);
// 設定定時要執行的函數
handler.removeCallbacks(CountdownTimer);
// 設定間隔的時間
handler.postDelayed(CountdownTimer, 1000);
}
private Runnable CountdownTimer = new Runnable() {
public void run() {
// 做你想做的事
// handler.postDelayed(updateTimer, 1000);
handler.postDelayed(this, 1000);
// 我不太懂這裏為什麼還要再設一次才會執行
}
};
}
Android中的Timer一般像下面這樣寫:
Timer timer = new Timer();
TimerTask task = new TimerTask() {
public void run () {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
final Handler handler = new Handler( ) {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
log.e("Timer","Timer");
update( );
break;
}
super.handleMessage(msg);
}
};
protected void onDestroy ( ) {
if (timer != null) {
timer.cancel( );
timer = null;
}
super.onDestroy( );
}
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.main);
timer.schedule(task,1000,5000);
}
最重要的一點是 timer.schedule(task,1000,5000),如果設置為 timer.schedule(task,5000)是不會工作的。
因為timer.schedule(task,5000) 是表示執行一次的任務。
timer.schedule(task,1000,5000)表示 1 秒鐘後開始 5 秒鐘為週期 重複執行,
更好的方法是通過下面的代碼 (Handler加Runnable執行緒,更簡潔)
private Handler handler = new Handler( );
private Runnable runnable = new Runnable( ) {
public void run ( ) {
update( );
handler.postDelayed(this,1000);
//postDelayed(this,1000)方法安排一個Runnable物件到主執行緒佇列中
}
};
handler.postDelayed(runnable,1000); // 開始Timer
handler.removeCallbacks(runnable); //停止Timer
留言列表