线程调度机制
线程调度机制
• 分时调度模型:所有的线程轮流获得cpu使用权,平均分配每个线程占用的cpu时间
• 抢占式调度模型:优先让可运行池中的优先级高的线程占用cpu,优先级相同随机选择一个线程
线程优先级(nice):
Android可以通过android.os.Process.setThreadPriority(int)设置线程优先级,参数范围20~24,数值越小优先级越高,0位默认的优先级
默认情况下,新创建的线程的优先级默认与母线程一致
线程分组 (cgroup):
Android系统会根据当前运行的可见的程序和不可见的后台程序对线程进行归类
异步方式
异步方式
• Thread: 直接创建一个线程
• AsyncTask:为U线程与工作线程之间进行快速的切换提供一种简单便捷的机制。适用于当下立即需要启动,但是异步执行的生命周期短暂的使用场景
1:默认线性调度执行,会阻塞后续任务
2:可以指定线程池并发调度
• HandlerThread:为某些回调方法或者等待某些任务的执行设一个专属的线程,并提供线程任务的调度机制(线程不断的从任务队列获取任务去执行,如采集图片视频等数据)
• ThreadPool:把任务分解成不同的单元,分发到各个不同的线上,进行同时并发处理
• IntentService: 适合于执行由U触发的后台Service任务,并可以把后台任务执行的情况通过一定的机制反馈给UI 。继承自普通service,内部使用了HandlerThread,在onHandlerintent的回调里面处理任务,也不受主页面生命周期影响。
• Loaders: Android系统提供了LoaderManager
线程优化
- 线程指定线程名,对线程分组便于问题排查
- 合理指定线程优先级
- 采用线程池复用线程
- 合适的场景选择合适的异步方式
- 控制整个应用总线程数量,应用各个模块复用线程
- 不再使用的HandlerThread需要退出
- 不要直接使用创建线程,应该采用线程池
网友评论