標籤:android style blog http color os io 使用 ar
ANRs (“Application Not Responding”),意思是”應用沒有響應“。
在如下情況下,Android會報出ANR錯誤:
– 主線程 (“事件處理線程” / “UI線程”) 在5秒內沒有響應輸入事件
– BroadcastReceiver 沒有在10秒內完成返回
通常情況下,下面這些做法會導致ANR
1、在主線程內進行網路操作
2、在主線程內進行一些緩慢的磁碟操作(例如執行沒有最佳化過的SQL查詢)
應用應該在5秒或者10秒內響應,否則使用者會覺得“這個應用很垃圾”“爛”“慢”…等等
很多初入Android開發的網友可能發現ANR的字樣,到底Android ANR是什麼呢? 其實ANR就是Application Not Responding的全稱,當某個應用處於長期假死狀態時Android系統會彈出一個視窗上面寫道,XXX is not responding給出兩個按鈕一個為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-15 16:49:02) ——
—— VM TRACES AT LAST ANR (/data/anr/traces.txt: 2011-01-15 16:49:02) ——
—————————————————————————————————————————————
閑話少說, 我總結了觀察log檔案的基本步驟 。
1,如果是ANR問題 , 則搜尋“ANR”關鍵詞 。 快速定位到關鍵事件資訊 。
2,如果是ForceClosed 和其它異常退出資訊,則搜尋”Fatal” 關鍵詞, 快速定位到關鍵事件資訊 。
3,定位到關鍵事件資訊後 , 如果資訊不夠明確的,再去搜尋應用程式套件組合的虛擬機器資訊 ,查看具體的進程和線程跟蹤的日誌,來定位到代碼 。
參考:http://www.yyz168.info/archivehttp://blog.sina.com.cn/s/blog_5f35912f0100wdh9.html
Android ANR、Force Closed(轉)