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. 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. "cur_id="+Thread.currentThread().getId());
18.
19. handlerThread.start();
20. "handlerThread.id=" + handlerThread.getId());
21. //post(runnable),只是直接运行了run(),run()内ThreadId与UIThread是一样的
22. // handler = new Handler();
23. //post(runnable),将runnable运行在handlerThread中,这是非UIThread的
24. new Handler(handlerThread.getLooper(), new Callback() {
25.
26. @Override
27. public boolean handleMessage(Message msg) {
28. "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. "receive message.whatB=" + msg.what);
42. }
43. };
44. new Runnable() {
45.
46. @Override
47. public void run() {
48. "handler_post_cur_id="+Thread.currentThread().getId());
49. 1);
50. 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
Android HandlerThread的用法
原创shineflowers 博主文章分类:Android ©著作权
文章标签 HandlerThread System android ide 文章分类 后端开发
©著作权归作者所有:来自51CTO博客作者shineflowers的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:Java 实现单例模式
下一篇:Java数字摘要 MD5
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
android点滴之HandlerThread的用法
一.介绍HandlerThread继承自Thread,当线程开启时,也就是它run方法运行起来后,线程同时创建了一个含有消息队列的Looper,并对外提供自己这个Looper对象的...
ui线程 消息队列 代码示例 消息处理 android系统 -
Android HandlerThread详解
Android HandlerThread使用,自带Looper消息循环的快捷类。
Android HandlerThrea android Android 子线程 -
Android中HandlerThread类的解析
Android应用中的消息循环由Looper和Handler配合完成,Looper类用于封装消息循环,类中有个
android thread null class string