关于HandlerThread类的学习心得
来源:互联网 发布:mysql数据库篡改 黑客 编辑:程序博客网 时间:2024/05/29 04:55
http://blog.csdn.net/qq_27258799/article/details/50854175
这篇帖子讲过Looper、Handler之间的关系,也说过Looper的加入,可以是一个线程升级为Looper线程,可以持续接收消息并执行一些事务,比如可以用来做图库,显示手机照片。
Looper线程的升级,使用方法大概是这样:
public class MyThread extends Thread{ private static final String TAG = "MyThread"; private Handler mHandler; public MyThread(String name){ super(name); } public Handler getHandler(){ return mHandler; } @Override public void run(){ Looper.prepare;//把Looper绑定到此线程 mHandler = new Handler(){ @Override public void handleMessage(Message msg){ switch(msg.what){ //处理消息 } } }; Looper.loop();//不要忘了调用loop()启动消息循环 //只有循环停止了,Looper才会返回 }}到此为止,一个Looper线程就诞生了,然后我们就可以发送Runnable对象或者消息,开始任务了。
MyThread thread = new MyThread("looper thread");thread.start();//过一会儿Handler handler = thread.getHandler();//小心:如果处理程序尚未初始化,会返回null!//发送Runnable对象handler.post(new Runnable(){ public void run(){ //处理一些事情 }});//发送消息int what = 0;int arg1 = 1;int arg2 = 2;Message msg = Message.obtain(handler, what, arg1, arg2);//还记得要用这种方法产生Message对象吧handler.sendMessage;
值得一提的是,Handler对象在run()方法中创建,因为它需要被绑定到指定的Looper,这个Looper就是在run()方法中调用Looper.prepare()创建的。因此在线程之前,调用getHandler()将会返回null。但是问题是,尽管线程已经启动,getHandler()也可能返回null,而且上述升级Looper线程的过程略微繁琐,这个时候HandlerThread就可以派上用场了。
上述例子可以改为这样:
public class MyHandlerThread extends HandlerThread(){ private static final String TAG = "MyThread"; private Handler mHandler; public MyThread(String name){ super(name); } public Handler getHandler(){ return mHandler; } @Override public void start(){ super.start(); Looper looper = getlooper(); mHandler = new Handler(looper){ @Override public void handleMessage(Message msg){ switch(msg.what){ //处理消息 } } }; }}这种情况下,只要MyHandlerThread.start()执行以后,就可以用getHandler()获取Handler对象了,不会出现竞争状态。
1 0
- 关于HandlerThread类的学习心得
- HandlerThread的学习心得
- 关于HandlerThread的一点认识
- HandlerThread 类的使用
- 关于HandlerThread
- 关于HandlerThread
- 关于InvocationHandler的学习心得
- 关于java的学习心得
- 关于InvocationHandler的学习心得
- 关于IOS的学习心得
- 关于多线程的学习心得
- 关于omapl138的学习心得
- 关于做软件的学习心得
- 关于多线程技术的学习心得
- Boost 关于 shared_ptr 的学习心得
- 关于缓冲区,我的学习心得
- 关于控件ID的学习心得
- 关于VC++_MFC的学习心得
- 关于finally的使用
- OpenCV简介及图像处理示例教程
- DIY文字闪动效果的TextView
- 关于label等uiview的圆角问题
- 卸载软件时出现"Windows Installer 软件包有问题"问题
- 关于HandlerThread类的学习心得
- [leetcode 285] Inorder Successor in BST---查找二叉搜索树中某个节点在中序遍历中的后续节点
- DVI接口
- C++ 排序函数 sort(),qsort()的用法
- Logger java日志处理
- 关于使用node进行网站前后端分离设想和问题解决
- 关于边界的问题
- 图的邻接矩阵
- 大志非才不就,大才非学不成—博文资源汇总