Android計時器正確應用方式解析

 目前許多大型廠商都紛紛將目光轉向了智能手機,在手機領域展開了一場激烈的競爭。由谷歌推出的Android手機操作系統就是一其中一個競爭對手。在這裏我們可以瞭解到Android計時器的相關應用。

昨天晚上在寫一個Android計時器,開始認爲很容易,用Java一般寫法,結果發現計時器根本不能運行,但卻不報任何錯誤,當時就呆在那了,不知道該怎麼辦了,後來在網上查了一下,Android考慮到線程安全問題,不允許在線程中執行UI線程(我的現在所知道,還有其他的限制發現中),在Android中,有一個很有意思的類:android.os.Handler,這個可以實現各處線程間的消息傳遞。

先看段代碼,這個實例化了一個Handler,Handler可以通過Message在多個線程通訊,我這裏做的是定時recLen加1,然後以一定的格式,顯示到recTime上(UI線程上的操作)。

  1. final Handler handler = new Handler(){   
  2. public void handleMessage(Message msg) {   
  3. switch (msg.what) {   
  4. case 1:   
  5. recLen++;  
  6. recTime.setText(GetRecTime(recLen));  
  7. break;   
  8. }   
  9. super.handleMessage(msg);   
  10. }   
  11. };  

下面定實例化一個TimerTask,這個是爲Timer提供一個定時執行的內容。我在這個方法中加的是給Handler一個發送消息功能,因這在Timer的線程中,無法直接操作UI線程。

  1. TimerTask task = new TimerTask(){   
  2. public void run() {   
  3. Message message = new Message();   
  4. message.what = 1;   
  5. handler.sendMessage(message);   
  6. }   
  7. };  

剩下的工作就簡單多,添加一個Timer,可以讓程序運行起來了

  1. timer = new Timer(true);  
  2. timer.schedule(task,1000, 1000);   
  3. //延時1000ms後執行,1000ms執行一次  
  4. //timer.cancel(); //退出Android計時器

說到這裏,也許有些還感覺雲裏霧裏,好久沒寫東西,也不知道怎麼把問題說的更明白,這個再貼上我開始的錯誤寫法,對比錯誤寫法,也許能讓大家更快的明白過來

Android計時器錯誤寫法

  1. TimerTask task = new TimerTask(){   
  2. public void run() {   
  3. recLen++;  
  4. recTime.setText(GetRecTime(recLen));  
  5. //直接在TimerTask中操作UI線程,單步調試的時候發現,程序根本就沒執行到這裏  
  6. }   
  7. };   
  8. timer = new Timer(true);  
  9. timer.schedule(task,1000, 1000);  

Android計時器的相關應用方法就爲大家介紹到這裏。還有其它問題可以到天翼空間社區尋找答案。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章