Android 效能最佳化之執行緒

johnchou發表於2021-09-09

在這裡向大家推薦一下我的課程,課程已經上線一年半的時間,受到了廣泛的好評,不僅可以幫助大家在短時間內體系化掌握Android效能最佳化的各種手段,更值得一提的是幫助很多小夥伴成功的進入了大廠,借用一位學員的評價:吃透課程內容,簡歷亮點頻出,面試官肯定難不倒你!

1、背景

對於 Android 的效能最佳化,我們一般重視的都是啟動速度、卡頓等較為明顯的問題。然而在這些明顯的問題之下還存在一些不明顯但是難以線上定位的問題,比如這篇文章要說的執行緒。

2、相關的問題

2.1 非同步一定會變快嗎?

為了提升主執行緒的響應性我們很正常的會建立非同步執行緒來執行耗時任務,然而非同步一定會使 App 整體的執行變快嗎?尤其是任務非常密集的時候,你確定嗎?

2.2 一個執行緒池就可以通吃了嗎?

基於封裝的思想以及統一管理的目的,專案中我們一般會提供一個執行緒池供所有研發同學使用,但是每一個任務不同的獨特性決定了一個執行緒池是無法適應所有任務的執行。因此我們需要對任務進行分級,根據任務的不同來決定任務執行的執行緒池。

2.3 執行緒的優先順序怎麼設定才能起作用?

執行緒是可以設定優先順序的,但是不合理的優先順序設定只會加劇資源的爭搶或者導致優先順序設定不生效。

2.4 OutOfMemoryError: pthread_create 是什麼原因,如何規避?

如果對於以上三個問題來說只是暗藏的問題的話,那這個 pthread_create 問題的表現則是崩潰,會直接影響使用者的實際體驗。而這類問題在實際使用者使用的線上,是比較難以解決的。

3、破解之道

3.1 鎖定執行緒建立位置

對於執行緒收斂最重要的第一點就是要鎖定目前專案中所有執行緒的建立者,包括了業務上的執行緒以及三方庫中的執行緒。

3.2 非同步封裝

接下來我們對專案中所使用到的非同步方式進行封裝,其中最主要的是執行緒池的封裝,將執行緒池根據需要進行封裝並且根據任務型別來區分,從而實現不同型別的任務執行於不同型別的執行緒池中。

3.3 執行緒收斂

專案中存在建立執行緒的地方非常多:原生執行緒池、封裝執行緒池、AsyncTask、RxJava、IntentService、HandlerThread、野執行緒等等。首先要將執行緒建立這一步掌握住,否則無法進行執行緒收斂,那接下來的工作根本無法進行。

4、總結

本文初步總結了 Android 專案中由執行緒引發的各種問題以及解決之道,有需要歡迎學習我的課程。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4422/viewspace-2826549/,如需轉載,請註明出處,否則將追究法律責任。

相關文章