Android 性能优化之线程优化

Android线程调度机制

线程调度模型
  • 分时调度模型: 所有的线程轮流获得CPU使用权,平均分配每个线程占用的cpu时间
  • 抢占式调度模型(Android):优先让可运行池中的优先级高的线程占用cpu,优先级相同随机选择一个线程
线程优先级
Android可以通过android.os.Process.setThreadPriority(int)设置线程优先级,
参数范围-20~24,数值越小优先级越高,0为默认的优先级。

默认情况下,新创建的线程的优先级默认与母线程一致。

我们可以通过在主线程上new出的新线程,优先级+1,保障主线程优先级更高

线程分组

Android会根据当前运行的可见的程序和不可见的后台程序对线程进行分类。

我们可以人为对线程进行分组

Android异步方式

  • new Thread: 不推荐使用
  • AsyncTask:默认线性调度执行,会阻塞后续任务,可以指定线程池并发调度
  • HandlerThread:线程不断地从任务队列获取任务去执行,使用于图片采集,视频采集
  • ThreadPool: 把任务分解成不同的单元,分发到各个不同的线程上,进行同时并发处理
  • IntentService: 内部用的是HandlerThread,适合执行由UI触发的后台Service任务,并可以把后台任务执行的情况通过一定的机制反馈给UI。IntentService因为是前台的,所以优先级比后台线程要高,且不太容易被系统杀死,使用场景:间隔性的异步任务,时间长一些的下载文件等
  • Loaders: Android系统提供了LoaderManager

建议对Thread进行命名,这样排查问题会方便很多

Android线程优化方案

  • 线程指定线程名,对线程分组便于进行排查
  • 合理指定线程优先级
  • 采用线程池复用线程
  • 合适的场景选择合适的异步方式
  • 控制整个应用总线程数数量,应用各个模块复用线程
  • 不再使用的HandlerThread需要退出
  • 不要直接使用new创建线程,应该采用线程池
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氦客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值