Android中HandlerThread

来源:互联网 发布:apache impala 编辑:程序博客网 时间:2024/06/05 20:59





http://blog.csdn.net/linghu_java/article/details/39502359

http://blog.csdn.net/linghu_java/article/details/39502359http://blog.csdn.net/linghu_java/article/details/39502359http://blog.csdn.net/linghu_java/article/details/39502359







c

分类: Android开发 73人阅读 评论(0) 收藏 举报

目录(?)[+]

今天我们一起来学习下一个Android中比较简单的类HandlerThread,虽然它的初始化有点小麻烦。

介绍

首先我们来看看为什么我们要使用HandlerThread?在我们的应用程序当中为了实现同时完成多个任务,所以我们会在应用程序当中创建多个线程。为了让多个线程之间能够方便的通信,我们会使用Handler实现线程间的通信。

下面我们看看如何在线程当中实例化Handler。在线程中实例化Handler我们需要保证线程当中包含Looper(注意UI-Thread默认包含Looper)。

为线程创建Looper的方法如下:在线程run()方法当中先调用Looper.prepare()初始化Looper,然后再run()方法最后调用Looper.loop(),这样我们就在该线程当中创建好Looper。(注意Looper.loop()方法默认是死循环)

我们实现Looper有没有更加简单的方法呢?当然有,这就是我们的HandlerThread。我们来看下AndroidHandlerThread的描述:

Handy class for starting a new thread that has a looper. The looper can then be used to create handler classes. Note that start() must still be called.


使用步骤

尽管HandlerThread的文档比较简单,但是它的使用并没有想象的那么easy。

  1. 创建一个HandlerThread,即创建了一个包含Looper的线程。

    HandlerThread handlerThread = new HandlerThread("leochin.com");

    handlerThread.start(); //创建HandlerThread后一定要记得start()

  2. 获取HandlerThread的Looper

    Looper looper = handlerThread.getLooper();

  3. 创建Handler,通过Looper初始化

    Handler handler = new Handler(looper);

通过以上三步我们就成功创建HandlerThread。通过handler发送消息,就会在子线程中执行。

如果想让HandlerThread退出,则需要调用handlerThread.quit();



  1. public class TestHandlerActivity extends Activity implements OnClickListener{  
  2.       
  3.     public Button handlerThreadBTN;   
  4.     MyHandlerThread handlerThread;  
  5.     Handler handler;  
  6.       
  7.     /** Called when the activity is first created. */  
  8.     @Override  
  9.     public void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         //打印UI线程的名称   
  12.         System.out.println("onCreate  CurrentThread = " + Thread.currentThread().getName());  
  13.           
  14.         setContentView(R.layout.main);  
  15.           
  16.         handlerThreadBTN = (Button) findViewById(R.id.handlerThreadBtn);  
  17.         handlerThreadBTN.setOnClickListener(this);  
  18.           
  19.         handlerThread = new MyHandlerThread("myHanler");  
  20.         handlerThread.start();  
  21.         //注意: 这里必须用到handler的这个构造器,因为需要把callback传进去,从而使自己的HandlerThread的handlerMessage来替换掉Handler原生的handlerThread   
  22.         handler = new Handler(handlerThread.getLooper(), handlerThread);  
  23.           
  24.           
  25.     }  
  26.   
  27.     @Override  
  28.     public void onClick(View v) {  
  29.         //点击按钮后来开启线程   
  30.         handler.sendEmptyMessage(1);  
  31.     }  
  32.       
  33.       
  34.     private class MyHandlerThread extends HandlerThread implements Callback {  
  35.   
  36.         public MyHandlerThread(String name) {  
  37.             super(name);  
  38.         }  
  39.   
  40.         @Override  
  41.         public boolean handleMessage(Message msg) {  
  42.             //打印线程的名称   
  43.             System.out.println(" handleMessage CurrentThread = " + Thread.currentThread().getName());  
  44.             return true;  
  45.         }  
  46.           
  47.           
  48.     }  


0 0
原创粉丝点击