Android中HandlerThread
来源:互联网 发布:kali linux 使用教程 编辑:程序博客网 时间:2024/06/06 04:01
今天我们一起来学习下一个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创建线程
- Android MediaProvider数据库模式
- Babelfish (map 用法。<string, string>
- SQL Server 检查和处理死锁问题
- ubuntu Android Studio
- ubuntu12.04先编译android2.3.6源代码
- Android中HandlerThread
- IOS ----UIButton用法详解
- Cocos2d-X Box2D中部分方法的重点理解
- C语言中的运算符优先级
- LINUX学习[3]--shell脚本提取文件的文件名、扩展名
- ++i与i++的区别
- linux c 消息队列的使用
- windows的启动过程
- 同一个浏览器打开多个标签访问同一个网站,只能等待其中一个执行完毕才能执行下一个(php的session锁机制)