ANR 定位和修正
可以通過查看/data/anr/traces.txt查看ANR信息。
根本原因是:主線程被卡了,導致應用在5秒時間未響應用戶的輸入事件。
很多種ANR錯誤出現的場景:
1) 主線程當中執行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回調中盡量耗時的操作。
總結
- 上一篇: 战神z7怎么进去启动盘 如何制作战神z7
- 下一篇: win7怎么用u盘还原 使用U盘还原Wi