- 不能通過非UI線程對View進行操作。因為Android的UI不是安全的,如果View能被不同的線程所訪問或修改,那么就可能在程序的執行期間,產生不可預期的行為或者并發錯誤。
- 使用線程時,避免在循壞中使用同步,因為獲取和釋放鎖的操作代價很大。會引起CPU資源的損耗。
- 處理多線程以及線程間通信時,使用
HandlerThread
來操作,它內部包裝了Looper,記得不用的時候退出/釋放資源哦。 - 當工作線程與UI線程之間通信的時候,推薦使用AsyncTask(Android 7.0后內部任務變成串行處理,不再會出現以前并行時超過任務數執行飽和策略的情況)
- Loader可以用來代替AsyncTask的某些情況,因為Loader的生命周期是獨立的(與Application Context有關),當Activity/Fragment銷毀重建時,它仍然在,而且它特別使用異步操作,比如AsyncTaskLoader代替AsyncTask也可以實現后者的功能,但是生命周期完全獨立于Activity。切記Loader使用完記得銷毀。
- 當你的Service不需要交互時,請使用可以自動停止的IntentService。
- 當你希望延長BroadcastReceiver的生命周期時,例如啟動一個后臺線程IntentService。在onReceiver中調用
BroadcastReceiver.goAsync()
,它會返回一個PendingResult對象,這時,廣播接收器的生命周期會延長持續到PendingResult.finish()
方法調用。 - 線程池最好用構造方法手動創建,而不要用Executors來直接調用工廠方法,這樣利于明白線程池的運行規則,避免用了錯誤的線程池導致資源耗盡。
- 給線程一個好聽的名字,調試時候用。
- 線程池設置線程的存活時間,以保證空閑線程準確釋放。
Android性能優化之線程優化
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
推薦閱讀更多精彩內容
- Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
- java 接口的意義-百度 規范、擴展、回調 抽象類的意義-樂視 為其子類提供一個公共的類型封裝子類中得重復內容定...