handler post(Runable)運行在哪個線程


 
 

 

方法一:

(java

習慣,在

android

不推薦使用)

 

剛剛開始接觸

android

線程編程的時候,習慣好像

java

一樣,試圖用下面的代碼解決問題

 

new

 Thread( 

new

 Runnable() {   

  

 

    

public

 

void

 run() {   

  

 

    

   

  myView.invalidate(); 

   

 

    

 }  

   

   

   

 

 

}).start();

 

可以實現功能,刷新

UI

界面。但是這樣是不行的,因為它違背了單線程模型:

Android UI

作並不是線程安全的並且這些操作必須在

UI

線程中執行。

 

方法二:(

Thread+Handler)

 

查閱了文檔和

apidemo

后,發覺常用的方法是利用

Handler

來實現

UI

線程的更新的。

 

Handler

來根據接收的消息,處理

UI

更新。

Thread

線程發出

Handler

消息,通知更新

UI

 

Handler myHandler = 

new

 Handler() {  

 

    

   

   

public

 

void

 handleMessage(Message msg) {    

    

   

   

   

  

switch

 (msg.what) {  

 

 

    

   

   

   

   

   

 

case

 TestHandler.GUIUPDATEIDENTIFIER:  

  

    

   

   

   

   

   

   

   myBounceView.invalidate(); 

  

    

   

   

   

   

   

   

   

break

;   

 

    

   

   

   

  } 

  

 

    

   

   

   

  

super

.handleMessage(msg);  

 

 

    

   

   }   

 

    

 };  

 

 

class

 myThread 

implements

 Runnable {   

 

    

   

   

public

 

void

 run() {  

 

    

   

   

   

  

while

 (!Thread.currentThread().isInterrupted()) {   

  

    

   

   

   

   

   

   

 

 

    

   

   

   

   

   

 Message message = 

new

 Message();  

 

 

    

   

   

   

   

   

 message.what = TestHandler.GUIUPDATEIDENTIFIER; 

   

    

   

   

   

   

   

   

 

    

   

   

   

   

   

 TestHandler.

this

.myHandler.sendMessage(message);    

    

   

   

   

   

   

 

try

 { 

  

 

    

   

   

   

   

   

   

   Thread.sleep(100); 

   

 

    

   

   

   

   

   

 } 

catch

 (InterruptedException e) {   

 

    

   

   

   

   

   

   

   Thread.currentThread().interrupt(); 

   

    

   

   

   

   

   

 }  

 

 

    

   

   

   

  } 

  

 

    

   

   }   

 

    

 }  

 

 

以上方法

demo

:

http://rayleung.javaeye.com

/blog/411860

 

方法三:(

java

習慣,不推薦)

 

Android

平台中需要反復按周期執行方法可以使用

Java

上自帶的

TimerTask

類,

Tim

erTask

相對於

Thread

來說對於資源消耗的更低,除了使用

Android

自帶的

 

AlarmManager

使用

Timer

定時器是一種更好的解決方法。

 

我們需要引入

import 

java.util.Timer; 

 

import java.util.Tim

erTask;

 

public

 

class

 JavaTimer 

extends

 Activity {  

 

  

 

    Timer timer = 

new

 Timer();  

 

    TimerTask task = 

new

 TimerTask(){   

 

    

   

 

public

 

void

 run() {  

 

    

   

   

  setTitle("hear me?");  

 

    

   

 }  

   

   

   

 

 

    };  

 

 

    

public

 

void

 onCreate(Bundle savedInstanceState) {   

    

   

 

super

.onCreate(savedInstanceState);   

    

   

 setContentView(R.layout.main);   

    

   

 

    

   

  timer.schedule(task, 10000); 

  

 

    }  

 

}  

 

方法四:

(TimerTask + Handler)

 

實際上這樣做是不行的,這跟

Android

的線程安全有關!應該通過配合

Handler

來實現

timer

功能的!

 

public

 

class

 TestTimer 

extends

 Activity {  

 

  

 

    Timer timer = 

new

 Timer();  

 

    Handler handler = 

new

 Handler(){   

 

    

   

 

public

 

void

 handleMessage(Message msg) {   

    

   

   

  

switch

 (msg.what) {  

   

 

 

    

   

   

  

case

 1:   

   

 

    

   

   

   

   setTitle("hear me?");  

 

    

   

   

   

   

break

;   

   

 

    

   

   

  } 

   

  

 

    

   

   

  

super

.handleMessage(msg);  

 

    

   

 }  

 

    

   

   

 

    };  

 

 

    TimerTask task = 

new

 TimerTask(){   

 

 

    

   

 

public

 

void

 run() {  

 

    

   

   

  Message message = 

new

 Message(); 

   

  

 

    

   

   

  message.what = 1;  

   

 

 

    

   

   

  handler.sendMessage(message);  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM