HandlerThread详解
来源:互联网 发布:怎么看淘宝店家链接 编辑:程序博客网 时间:2024/05/17 20:28
- 作用 :获取子线程的looper,使用该looper初始化handler时可以获取子线程的handler对象
- 用法
- HandlerThread mHanderThread = new HandlerThread("threadName");
- mHanderThread.start();//获取位于新线程的Looper对象
- Handler mHander = new Hander(mHandlerThread.getLooper());//至此创建了一个子线程处理任务的Handler对象,可以在此mHandler中处理耗时任务
- HandlerThread方法里面最后退出释放资源有两个方法,分别是quit()和quitSafely(),下面看一下这两个方法的区别:由HandlerThread源码可知这两个方法最终分别调用了MessageQueue里面的以下两个方法
private void removeAllMessagesLocked() { Message p = mMessages; while (p != null) { Message n = p.next; p.recycleUnchecked(); p = n; } mMessages = null;}
private void removeAllFutureMessagesLocked() { final long now = SystemClock.uptimeMillis(); Message p = mMessages; if (p != null) { if (p.when > now) { removeAllMessagesLocked(); } else { Message n; for (;;) { n = p.next; if (n == null) { return; } if (n.when > now) { break; } p = n; } p.next = null; do { p = n; n = p.next; p.recycleUnchecked(); } while (n != null); } }}
最终到了MessageQueue的removeAllMessageLocked()和removeAllFutureMessageLocked(),由上面的代码可知,前一个方法删除了所有messageQueue里面的message,后面一个判断了时间,只删除了执行时间大于当前时间的message,也就是说会把delay为0以及当前需要执行的message执行完。 - 总结:
HandlerTheard继承自 Thread类,并创建位于该线程的Looper对象,提供了getLooper()方法来获取创建的looper对象,以及quit()和quitSafely()两个方法退出并释放messageQueue队列 ,注意run()方法里面的notifyAll和getLooper方法里面的wait。解决了多线程操作的线程同步问题,因为getLooper是在一个线程调用而run方法是在另一个线程调用,getLooper方法执行时如果run方法没有执行则进入wait等待,直到run方法中looper初始化完毕唤醒该方法。
1 0
- HandlerThread详解
- HandlerThread详解
- HandlerThread详解
- 安卓-HandlerThread详解
- 详解 Android 中的 HandlerThread
- Android HandlerThread详解
- 详解 Android 中的 HandlerThread【转】
- Handler&HandlerThread&Thread&AsyncTask详解
- HandlerThread
- HandlerThread
- HandlerThread
- HandlerThread
- HandlerThread
- HandlerThread
- HandlerThread
- HandlerThread
- HandlerThread
- HandlerThread
- ACM:蓝桥杯:Fibonacci数列
- 面试中的排序算法总结
- (15.1.23)Guitar-Structure
- SpringMvc运行原理
- 349. Intersection of Two Arrays
- HandlerThread详解
- Java多态
- 58. Length of Last Word
- AS Error:Failed to resolve: javax.inject:javax.inject:1问题解决
- android 无预加载的viewpager
- [机器学习篇]基于Scikit learn库中KNN,SVM算法的笔迹识别
- Ubuntu下 sqlitebrowser 查看 Android Sqlite数据库
- UML常用图的几种关系的总结
- 拦截器与过滤器的区别