快速簡單處理anr


簡單處理anr的流程

1.首先應用發生anr的情況有如下幾種:

  • Service中各生命周期函數執行超過20s。

  • BroadcastReceiver的onReceiver()超過10s;

  • 用戶的輸入在5s內沒被App響應;

    上面信息來自

遇到anr我們的姿勢應該是什么樣子呢?

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,現在機器性能比較好,一般不會出現,如果出現了也不要擔心,多數是把問題代碼放到線程中就好了,如有問題歡迎反饋,謝謝!!


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com