课程名称:Top团队大牛带你玩转Android性能分析与优化
课程章节:App性能概览与平台化实践
主讲老师:随风绽放
课程内容
1.Android 线程调度原理剖析
线程调度的原理是,在任一时刻,只有一个线程占用 CPU,只有一个线程是处于运行状态的。多线程并发实际上是轮流获取 CPU 的使用权。JVM 按照特定机制来分配 CPU 的使用权。
常见的线程调度模型包括:
- 分时调度模型,线程轮流获取 CPU 的使用权,每个线程均分 CPU 的时间。
- 抢占式调度模型,优先级高的线程获取更多的 CPU 的使用权,JVM 就是采用这种调度策略。
Android 的线程调度有两个重要的值:
- nice 值,在 Process 类中定义的,nice 值越小,优先级越高,默认值是 THREAD_PRIORITY_DEFAULT。
- cgroup,是更严格的群组调度策略,保证前台线程可以获取更多的 CPU 使用权。
2.Android 异步方式汇总
Android 中常用的异步方式包括以下几种,每种异步方式都有适合自己的使用场景。
- Thread,最简单、常见的异步方式,不易复用,频繁的创建和销毁会导致开销增大,不适合复杂的场景。
- HandlerThread,自带消息循环的线程,串行执行,长时间运行时,会不断地从队列中获取任务。
- IntentService,继承自 Service,在内部创建了 HandlerThread,异步方式,不会占用主线程,优先级较高,不容易被系统 Kill 掉。
- AsyncTask,是 Android 提供的工具类,无需自己处理线程的切换,在使用时需要注意版本不一致导致的兼容问题。
- 线程池,Java 提供的线程池,容易复用,减小因为线程的频繁创建和销毁引起的系统开销。功能强大,可以执行定时任务、有任务队列和并发数控制等功能。
- RxJava,由强大的 Scheduler 集合提供,对不同的任务类型进行了区分、比如 IO 密集型任务、Computation 计算型任务等;
3.Android 线程优化实战
在 Android 中使用线程要遵循的准则:
- 严禁使用new Thread,使用方式比较粗放,与其他异步方式相比,没有优势。
- 提供基础线程池供各个业务线使用,避免各个业务线各自维护一套线程池导致线程过多。
- 根据任务类型选择合适的异步方式,比如优先级低、长时间执行的异步任务可以使用HandlerThread。有个任务定时执行,可以使用线程池。
- 创建线程必须命名,方便定位线程归属,可以在线程运行期调用Thread.currentThread().setName() 来修改名字。
- 对关键异步任务进行监控,异步不等于不耗时,可以通过 AOP 的方式实现无侵入的监控。
- 重视优先级的设置,可以调用 Process.setThreadPriority()来给线程设置优先级,优先级可以根据情况不同,设置多次。
课程收获
这一章内容对 Android 中的异步方式做了全面的汇总,对每种方式的优缺点和使用场景都做了详细的介绍,最后对 Android 中线程的使用给出了一些需要遵守的准则。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦