亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

【學習打卡】第7天 App 線程優化

標簽:
Android

课程名称: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 中线程的使用给出了一些需要遵守的准则。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
移動開發工程師
手記
粉絲
12
獲贊與收藏
17

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消