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執行緒
- 執行緒池建立的幾種方式執行緒
- C++ 執行緒同步的四種方式C++執行緒
- java--執行緒池--建立執行緒池的幾種方式與執行緒池操作詳解Java執行緒
- 執行緒池的五種狀態及建立執行緒池的幾種方式執行緒
- C++執行緒同步的四種方式(Windows)C++執行緒Windows
- 在非主執行緒中建立視窗執行緒
- Java建立多執行緒的幾種方式實現Java執行緒
- c# 多執行緒的幾種方式 【轉載】C#執行緒
- NPTL 執行緒同步方式執行緒
- android 建立多執行緒的幾種方法Android執行緒
- .NET中各種執行緒同步鎖執行緒
- Java中的執行緒同步詳解Java執行緒
- 非同步/同步,阻塞/非阻塞,單執行緒/多執行緒概念梳理非同步執行緒
- 獲取Java執行緒返回值的幾種方式Java執行緒
- Java之執行緒安全問題的3種處理方式(通過執行緒同步)Java執行緒
- Android執行緒篇(一)實現執行緒的幾種方法及區別Android執行緒
- Java之執行緒同步完成售票例項的6種方式Java執行緒
- Android 判斷當前執行緒是否是主執行緒的兩種方法Android執行緒
- 多執行緒-執行緒安全問題的產生原因分析以及同步程式碼塊的方式解決執行緒安全問題執行緒
- 執行緒的幾種狀態執行緒
- 建立執行緒的三種方式執行緒
- 執行緒建立的四種方式執行緒
- 【多執行緒高併發程式設計】二 實現多執行緒的幾種方式執行緒程式設計
- Java中的執行緒同步Java執行緒
- 主執行緒等待所有其他執行緒執行完畢,然後再繼續執行主執行緒的邏輯,有以下幾種方法可以實現:執行緒
- Java 中執行緒池的7種建立方式!Java執行緒
- (轉)解決XMind執行卡頓
- 執行緒、開啟執行緒的兩種方式、執行緒下的Join方法、守護執行緒執行緒
- 關於線上檢測主執行緒卡頓的問題執行緒
- 多執行緒-多執行緒兩種方式的圖解比較及區別執行緒圖解
- 幾種簡潔建立執行緒的方式以及使用注意事項執行緒
- iOS中保證執行緒安全的幾種方式與效能對比iOS執行緒
- Java提供的幾種執行緒池Java執行緒
- JAVA 執行緒的幾種狀態Java執行緒
- 【java】【多執行緒】建立執行緒的兩種常用方式(2)Java執行緒
- java執行緒建立的兩種方式Java執行緒
- 程式執行緒、同步非同步、阻塞非阻塞、併發並行執行緒非同步並行