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

  

posted @ 2016-07-20 23:26  灰色有点白  阅读(7131)  评论(0编辑  收藏  举报