1.首先應用發生anr的情況有如下幾種:
Service中各生命周期函數執行超過20s。
BroadcastReceiver的onReceiver()超過10s;
用戶的輸入在5s內沒被App響應;
上面信息來自
1.首先我們需要導出anr的日志,anr問題的log一般都在/data/anr/目錄下,所以我們輸入如下adb 命令:
adb pull /data/anr/traces.txt d:/ 導出到d盤
導出后的文件大約是這樣子的:
----- pid 2677 at 2017-07-21 17:38:10 ----- //發生的日期
Cmd line: cn.xxx.xxx //哪個應用
"main" prio=5 tid=1 NATIVE //找這個下面的那段日志
at android.database.sqlite.SQLiteConnection.nativeExecute(Native Method)
at android.database.sqlite.SQLiteConnection.execute(SQLiteConnection.java:555)
at android.database.sqlite.SQLiteSession.endTransactionUnchecked(SQLiteSession.java:437)
at android.database.sqlite.SQLiteSession.endTransaction(SQLiteSession.java:401)
at android.database.sqlite.SQLiteDatabase.endTransaction(SQLiteDatabase.java:522) 。。。。//這后面應該會有相關的信息,會提示到具體的類和方法
到了這里基本上已經定位到問題的所在了,然后就是去項目里找具體問題了。
一般無響應都是UI線程中做了耗時操作,不過由於以前的機器性能還沒那么好,所以會出現較多的anr,現在機器性能比較好,一般不會出現,如果出現了也不要擔心,多數是把問題代碼放到線程中就好了,如有問題歡迎反饋,謝謝!!
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。