Android ANR、Force Closed(轉)

來源:互聯網
上載者:User

標籤: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(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.