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

 
 

 

方法一:html

(javajava

習慣,在android

androidweb

不推薦使用)編程

 

剛剛開始接觸api

android安全

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

javapost

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

 

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);  

相關文章
相關標籤/搜索