Android HandlerThread的用法

HandlerThread 继承自Thread,内部封装了Looper。

首先Handler和HandlerThread的主要区别是:Handler与Activity在同一个线程中,HandlerThread与Activity不在同一个线程,而是别外新的线程中(Handler中不能做耗时的操作)。

用法:

  1. import android.app.Activity;  
  2. import android.os.Bundle;  
  3. import android.os.Handler;  
  4. import android.os.Handler.Callback;  
  5. import android.os.HandlerThread;  
  6. import android.os.Message;  
  7.   
  8.   
  9. public class MainActivity extends Activity {  
  10.     HandlerThread handlerThread = new HandlerThread("test");  
  11.     Handler handler;  
  12.       
  13.     @Override  
  14.     protected void onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.activity_main);  
  17.         System.out.println("cur_id="+Thread.currentThread().getId());  
  18.           
  19.         handlerThread.start();  
  20.         System.out.println("handlerThread.id=" + handlerThread.getId());  
  21.         //post(runnable),只是直接运行了run(),run()内ThreadId与UIThread是一样的  
  22. //      handler = new Handler();   
  23.         //post(runnable),将runnable运行在handlerThread中,这是非UIThread的  
  24.         handler = new Handler(handlerThread.getLooper(), new Callback() {  
  25.               
  26.             @Override  
  27.             public boolean handleMessage(Message msg) {  
  28.                 System.out.println("receive message.whatA=" + msg.what);  
  29.                 if (msg.what == 1) {  
  30.                     return true;//不再向外层传递  
  31.                 } else {  
  32.                     return false//外层的handleMessage() 继续执行  
  33.                 }  
  34.                   
  35.             }  
  36.         }) {  
  37.             @Override  
  38.             public void handleMessage(Message msg) {  
  39.                 // TODO Auto-generated method stub  
  40.                 super.handleMessage(msg);  
  41.                 System.out.println("receive message.whatB=" + msg.what);  
  42.             }  
  43.         };  
  44.         handler.post(new Runnable() {  
  45.               
  46.             @Override  
  47.             public void run() {  
  48.                 System.out.println("handler_post_cur_id="+Thread.currentThread().getId());  
  49.                 handler.sendEmptyMessage(1);  
  50.                 handler.sendEmptyMessage(2);  
  51.             }  
  52.         });  
  53.           
  54.     }  
  55.   
  56. }  
运行结果:
  1. 01-23 07:12:31.590: I/System.out(12386): cur_id=1  
  2. 01-23 07:12:31.590: I/System.out(12386): handlerThread.id=1866  
  3. 01-23 07:12:31.590: I/System.out(12386): handler_post_cur_id=1866  
  4. 01-23 07:12:31.600: I/System.out(12386): receive message.whatA=1  
  5. 01-23 07:12:31.600: I/System.out(12386): receive message.whatA=2  
  6. 01-23 07:12:31.600: I/System.out(12386): receive message.whatB=2  


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。