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中比较简单的类HandlerThread
,虽然它的初始化有点小麻烦。
介绍
首先我们来看看为什么我们要使用HandlerThread
?在我们的应用程序当中为了实现同时完成多个任务,所以我们会在应用程序当中创建多个线程。为了让多个线程之间能够方便的通信,我们会使用Handler
实现线程间的通信。
下面我们看看如何在线程当中实例化Handler
。在线程中实例化Handler
我们需要保证线程当中包含Looper(注意:UI-Thread默认包含Looper)。
为线程创建Looper的方法如下:在线程run()方法当中先调用Looper.prepare()初始化Looper,然后再run()方法最后调用Looper.loop(),这样我们就在该线程当中创建好Looper。(注意:Looper.loop()方法默认是死循环)
我们实现Looper有没有更加简单的方法呢?当然有,这就是我们的HandlerThread
。我们来看下Android
对HandlerThread
的描述:
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。
创建一个
HandlerThread
,即创建了一个包含Looper的线程。HandlerThread handlerThread = new HandlerThread("leochin.com");
handlerThread.start(); //创建HandlerThread后一定要记得start()
获取
HandlerThread
的LooperLooper looper = handlerThread.getLooper();
创建Handler,通过Looper初始化
Handler handler = new Handler(looper);
通过以上三步我们就成功创建HandlerThread
。通过handler发送消息,就会在子线程中执行。
如果想让HandlerThread
退出,则需要调用handlerThread.quit();
。
- public class TestHandlerActivity extends Activity implements OnClickListener{
- public Button handlerThreadBTN;
- MyHandlerThread handlerThread;
- Handler handler;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- //打印UI线程的名称
- System.out.println("onCreate CurrentThread = " + Thread.currentThread().getName());
- setContentView(R.layout.main);
- handlerThreadBTN = (Button) findViewById(R.id.handlerThreadBtn);
- handlerThreadBTN.setOnClickListener(this);
- handlerThread = new MyHandlerThread("myHanler");
- handlerThread.start();
- //注意: 这里必须用到handler的这个构造器,因为需要把callback传进去,从而使自己的HandlerThread的handlerMessage来替换掉Handler原生的handlerThread
- handler = new Handler(handlerThread.getLooper(), handlerThread);
- }
- @Override
- public void onClick(View v) {
- //点击按钮后来开启线程
- handler.sendEmptyMessage(1);
- }
- private class MyHandlerThread extends HandlerThread implements Callback {
- public MyHandlerThread(String name) {
- super(name);
- }
- @Override
- public boolean handleMessage(Message msg) {
- //打印线程的名称
- System.out.println(" handleMessage CurrentThread = " + Thread.currentThread().getName());
- return true;
- }
- }
- Android中HandlerThread
- Android中HandlerThread
- Android中HandlerThread的使用
- Android中HandlerThread类的解析
- 终止Android中HandlerThread的方法
- Android中Handler、HandlerThread、AsyncTask的应用
- Android 中handler和handlerThread的使用
- Android中Handler、HandlerThread、AsyncTask的应用
- 在Android中使用HandlerThread创建线程
- 终止Android中HandlerThread的方法
- 在Android中使用HandlerThread创建线程
- 终止Android中HandlerThread的方法
- 在Android中使用HandlerThread创建线程
- 在Android中使用HandlerThread创建线程
- android中Handler和HandlerThread区别
- android中handlerthread与handler + thread区别
- Android中HandlerThread和IntentService详解
- 在Android中使用HandlerThread创建线程
- 虚拟内存与虚拟地址空间
- 前端单选框实现父/子级包函选项功能
- poj 2155 Matrix
- netty5.0之server端NioServerSocketChannel的bind分析
- 【java】getAbsolutePath()方法详解
- Android中HandlerThread
- chrome浏览器卡死问题解决
- 冀该统梦捉倍易哨鞠揖锻逊
- UVA Master-Mind Hints()
- 关于Eclipse Adt插件删除不掉的解决方法!
- C#操作字符串方法总结<转>
- 在本地创建git库,提交到远程
- UVA List of Conquests(字符串按字典排序)
- 【java】File类的详解使用方法