转载请注明链接:https://blog.csdn.net/feather_wch/article/details/82556153
HandlerThread
版本:2018/9/9-1(10:10)
问题汇总
- 总结HandlerThread相关所有可能的问题,用于自我检测和查漏补缺。
- 【☆】标记的是补充问题,直接给答案。其余问题答案都在文中。
- HandlerThread是什么?
【☆】HandlerThread任务是并行处理的?
不是!是串行处理的。如果一个任务执行时间过长会阻塞后续任务。
【☆】HandlerThread不能执行耗时过长的任务?
内部任务是串行处理的。如果一个任务执行时间过长会阻塞后续任务。
【☆】如何通过HandlerThread来执行一个具体任务?
外界需要通过
Hanlder
的消息方式来通知HandlerThread
来执行一个具体任务HandlerThread产生的背景?
- HandlerThread如何退出?
- HandlerThread的典型使用场景?
- HandlerThread的基本使用流程?
- HandlerThread是如何做到一个线程能够一直运行,有新的任务就处理,没有任务就等待?
- handlerThread.getLooper()必须在handlerThread.start()之后调用?
- HandlerThread的构造方法
- HandlerThread的run()做了哪些事情?
- HandlerThread如何退出?quit/quit或quitSafely
- HandlerThread的Tid有什么用?
- 为什么run中有notifyAll,getLooper中有wait?
- 为什么要设置线程优先级?为什么能防止内存泄漏和解决数据安全问题?
- 线程优先级设置的两种方法?两种方式的优先级范围?
基本使用(7)
1、HandlerThread是什么?
- 内嵌Looper、Handler、MessageQueue的Thread
- 内部具有队列,任务会串行处理。(如果一个任务执行时间过长,会阻塞后续任务)
- 执行任务:外界需要通过
Hanlder
的消息方式来通知HandlerThread
来执行一个具体任务
2、HandlerThread产生的背景?
- 一般线程执行完任务后就会停止,如果有很多任务导致频繁创建和销毁线程,会损耗系统资源。
- 如果子线程需要更新UI,要使用到Handler,此外需要创建Looper等操作,比较繁琐。
3、HandlerThread如何退出?
HandlerThread
的run
方法是无限循环
执行的,需要通过HandlerThread
的quit或quitSafely
方法来终止线程的执行
4、HandlerThread的典型使用场景?
- HandlerThread典型使用场景是IntentService
5、HandlerThread的基本使用
/**====================