close

 

 

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

 


arrow
arrow
    全站熱搜

    小彬彬 發表在 痞客邦 留言(1) 人氣()