Android ANR、Force Closed

Android ANR、Force Closed

   

ANRs (“Application NotResponding”),意思是”應用沒有響應“。

在如下情況下,Android會報出ANR錯誤:

– 主線程 (“事件處理線程” / “UI線程”) 在5秒內沒有響應輸入事件

– BroadcastReceiver 沒有在10秒內完成返回

通常情況下,下面這些做法會導致ANR

1、在主線程內進行網絡操作

2、在主線程內進行一些緩慢的磁盤操作(例如執行沒有優化過的SQL查詢)

應用應該在5秒或者10秒內響應,否則用戶會覺得“這個應用很垃圾”“爛”“慢”…等等

很多初入Android開發的網友可能發現ANR的字樣,到底Android ANR是什麼呢? 其實ANR就是ApplicationNot Responding的全稱,當某個應用處於長期假死狀態時Android系統會彈出一個窗口上面寫道,XXX is notresponding給出兩個按鈕一個爲force close一個爲wait。

可能觸發ANR的情況

1. 長時間的I/O處理,比如讀寫大文件,網絡訪問時造成的阻塞。

2.執行耗時的運算,Android默認爲超過5000ms即5秒開始彈出ANR窗口,某些應用可能首次執行時沒有緩存十分耗時,可以通過Splash播放閃屏Logo等方式來延緩加載

3. Service和appWidget中也要注意多線程的使用,除非它和Activity工作在不同的進程。

避免ANR的方法

1. 單獨開工作者線程,通過獨立的Thread或使用類似AsyncTask的方式來處理耗時的內容。

2. 耗時的操作儘量分段處理,使用類似狀態機的方法,類似Symbian的活動對象將一個複雜的事情,分段執行。

3.UI線程中不要處理過多的內容,比如將一個5MB的文本,讓TextView去setText,要知道這種UI操作,沒有什麼好方法去解決的,所以Android123提示,遇到UI中需要執行復雜的操作,可以參考上面2提到的分段處理方式。

 

Log 在android中的地位非常重要,要是作爲一個android程序員不能過分析log這關,算是android沒有入門吧 。下面我們就來說說如何處理log文件 。

什麼時候會有Log文件的產生 ?

Log的產生大家都知道 , 大家也都知道通過DDMS來看log , 但什麼時候會產生log文件呢 ?一般在如下幾種情況會產生log文件。
1,程序異常退出, uncaused exception
2,程序強制關閉,Force Closed (簡稱FC)
3,程序無響應, Application No Response (簡稱ANR) ,順便,一般主線程超過5秒麼有處理就會ANR
4,手動生成。

拿到一個日誌文件,要分成多段來看 。 log文件很長,其中包含十幾個小單元信息,但不要被嚇到 ,事實上他主要由三大塊兒組成 。

1,系統基本信息 ,包括 內存,CPU ,進程隊列 ,虛擬內存 ,垃圾回收等信息 

—— MEMORY INFO (/proc/meminfo) ——
—— CPU INFO (top -n 1 -d 1 -m 30 -t) ——
—— PROCRANK (procrank) ——
—— VIRTUAL MEMORY STATS (/proc/vmstat) ——
—— VMALLOC INFO (/proc/vmallocinfo) ——


2,時間信息 , 也是我們主要分析的信息 。
—— VMALLOC INFO (/proc/vmallocinfo) ——
—— EVENT INFO (/proc/vmallocinfo) ——


3,虛擬機信息 ,包括進程的,線程的跟蹤信息,這是用來跟蹤進程和線程具體點的好地方 。
—— VM TRACES JUST NOW (/data/anr/traces.txt.bugreport: 2011-01-1516:49:02) ——
—— VM TRACES AT LAST ANR (/data/anr/traces.txt: 2011-01-1516:49:02) ——

—————————————————————————————————————————————
閒話少說, 我總結了觀察log文件的基本步驟 。

 1,如果是ANR問題 , 則搜索“ANR”關鍵詞 。 快速定位到關鍵事件信息。
2,如果是ForceClosed 和其它異常退出信息,則搜索”Fatal” 關鍵詞, 快速定位到關鍵事件信息 。
3,定位到關鍵事件信息後 , 如果信息不夠明確的,再去搜索應用程序包的虛擬機信息 ,查看具體的進程和線程跟蹤的日誌,來定位到代碼。


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