继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【学习打卡】第7天 App 线程优化

GT9456
关注TA
已关注
手记 89
粉丝 12
获赞 17

课程名称: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 中使用线程要遵循的准则:

  1. 严禁使用new Thread,使用方式比较粗放,与其他异步方式相比,没有优势。
  2. 提供基础线程池供各个业务线使用,避免各个业务线各自维护一套线程池导致线程过多。
  3. 根据任务类型选择合适的异步方式,比如优先级低、长时间执行的异步任务可以使用HandlerThread。有个任务定时执行,可以使用线程池。
  4. 创建线程必须命名,方便定位线程归属,可以在线程运行期调用Thread.currentThread().setName() 来修改名字。
  5. 对关键异步任务进行监控,异步不等于不耗时,可以通过 AOP 的方式实现无侵入的监控。
  6. 重视优先级的设置,可以调用 Process.setThreadPriority()来给线程设置优先级,优先级可以根据情况不同,设置多次。

课程收获

这一章内容对 Android 中的异步方式做了全面的汇总,对每种方式的优缺点和使用场景都做了详细的介绍,最后对 Android 中线程的使用给出了一些需要遵守的准则。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP