Android--ANR可能發生點

主線程被 阻塞,導致應用在5秒時間未響應用戶

很多種ANR錯誤出現的場景:

1) 主線程當中執行IO/網絡操作,容易阻塞(Android4.0以後網絡IO不允許在主線程中)。

2) 主線程當中執行了耗時的計算。----自定義控件的時候onDraw方法裏面經常這麼做。(涉及自定義控件的性能優化:在onDraw裏面創建對象容易導致內存抖動—繪製動作會大量不斷調用,產生大量垃圾對象導致GC很頻繁就造成了內存抖動。)內存抖動就容易造成UI出現掉幀卡頓的問題

3) BroadCastReceiver沒有在10秒內完成處理。

4) BroadCastReceiver的onReceived代碼中也要儘量減少耗時的操作,建議使用IntentService處理。

5) Service執行了耗時的操作,因爲service也是在主線程當中執行的,所以耗時操作應該在service裏面開啓子線程來做。

6) 使用AsyncTask處理耗時的IO等操作。

7) 使用Thread或者HandlerThread時,使用Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)或者java.lang.Thread.setPriority(int priority)設置優先級爲後臺優先級,這樣可以讓其他的多線程併發消耗CPU的時間會減少,有利於主線程的處理。

8) Activity的onCreate和onResume回調中儘量耗時的操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章