Android幾種非同步方式,解決主執行緒中遇到的卡頓
起因:
當我們的UI越來越複雜的時候,或者說某個業務需要大量的計算的時候,我們的主執行緒會消耗大量的資源去計算,這個時候,我們的Activity或者說fragmemt等UI頁面就會出現卡頓,乃至ANR。總結一下,就是我們直接在主執行緒(UI執行緒)中,做耗時操作,就會造成卡頓,甚至ANR
解決方案:
1.優化耗時的計算,提高演算法,利用快取等資料;這種方式,一般帶來的提升在App這種場景中微乎其微,只有在大規模的併發場景中才會體現出效果(伺服器後臺服務中),打個比方,你存一年1W塊錢的定期,一年利息才200多塊,當你存1000W的時候,一年利息就有20多W,這種效果才明顯(手動滑稽)
2.利用非同步的方式,簡單來說,開啟另外一個執行緒去做耗時操作,利用CPU的多執行緒模式,這樣我們的主執行緒就不會卡頓在耗時操作中
非同步的方式:
1.直接使用繼承Thread類或者實現Runable介面(和主執行緒通訊還得使用handler)
2.AsyscTask(它的原理主要是利用執行緒池,各個歷史版本系統版本可能會有不同的缺陷)
3.利用Handler,Message,Looper(主執行緒預設開啟了Looper)
4.RxJava 執行緒模式.subscribeOn(Schedulers.io()),這樣可以開啟一個新執行緒來執行裡面的耗時程式碼
嚴格的地來說,Android裡面,主執行緒和子執行緒之間,不能使用sleep(),wait(),notify()等Java原生的執行緒通訊的方式,因為,主執行緒一旦sleep那麼整個App都不能正常執行(所有的Activity,Service等都在主執行緒執行中呢)
相關文章
- runloop解決Cell上主執行緒卡頓OOP執行緒
- 執行緒池建立的幾種方式執行緒
- java--執行緒池--建立執行緒池的幾種方式與執行緒池操作詳解Java執行緒
- C++執行緒同步的四種方式(Windows)C++執行緒Windows
- 執行緒池的五種狀態及建立執行緒池的幾種方式執行緒
- 在非主執行緒中建立視窗執行緒
- 非同步/同步,阻塞/非阻塞,單執行緒/多執行緒概念梳理非同步執行緒
- .NET中各種執行緒同步鎖執行緒
- c# 多執行緒的幾種方式 【轉載】C#執行緒
- Java建立多執行緒的幾種方式實現Java執行緒
- Java之執行緒安全問題的3種處理方式(通過執行緒同步)Java執行緒
- 獲取Java執行緒返回值的幾種方式Java執行緒
- Java中的執行緒同步詳解Java執行緒
- Java之執行緒同步完成售票例項的6種方式Java執行緒
- 程式執行緒、同步非同步、阻塞非阻塞、併發並行執行緒非同步並行
- 主執行緒等待所有其他執行緒執行完畢,然後再繼續執行主執行緒的邏輯,有以下幾種方法可以實現:執行緒
- 【多執行緒高併發程式設計】二 實現多執行緒的幾種方式執行緒程式設計
- 多執行緒,執行緒類三種方式,執行緒排程,執行緒同步,死鎖,執行緒間的通訊,阻塞佇列,wait和sleep區別?執行緒佇列AI
- 建立執行緒的三種方式執行緒
- 執行緒建立的四種方式執行緒
- 在Qt中,可以透過以下幾種常見方式來啟動執行緒QT執行緒
- 幾種簡潔建立執行緒的方式以及使用注意事項執行緒
- 面試官問我:建立執行緒有幾種方式?我笑了面試執行緒
- 執行緒、開啟執行緒的兩種方式、執行緒下的Join方法、守護執行緒執行緒
- 在 C++ 中,實現執行緒同步主要有以下幾種常見方法C++執行緒
- Java 中執行緒池的7種建立方式!Java執行緒
- 【java】【多執行緒】建立執行緒的兩種常用方式(2)Java執行緒
- Java中的執行緒同步Java執行緒
- 併發-0-同步/非同步/阻塞/非阻塞/程式/執行緒非同步執行緒
- 聊聊執行緒與程式 & 阻塞與非阻塞 & 同步與非同步執行緒非同步
- Java提供的幾種執行緒池Java執行緒
- JAVA多執行緒詳解(3)執行緒同步和鎖Java執行緒
- java建立執行緒池的幾中方式Java執行緒
- java 多執行緒之使用 interrupt 停止執行緒的幾種方法Java執行緒
- 【.NET 6】多執行緒的幾種開啟方式和程式碼演示執行緒
- (轉)解決XMind執行卡頓
- 對執行緒、協程和同步非同步、阻塞非阻塞的理解執行緒非同步
- 多執行緒併發同步問題及解決方案執行緒