今天面試遇到一個問題(什麼是arn,怎麼避免?),當時就傻了。回到家,在網上找到答案,在這裏作個記錄。面試
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等方式來延緩加載 app
3. Service和appWidget中也要注意多線程的使用,除非它和Activity工做在不一樣的進程。 線程
避免ANR的方法 對象
1. 單獨開工做者線程,經過獨立的Thread或使用相似AsyncTask的方式來處理耗時的內容。 進程
2. 耗時的操做盡可能分段處理,使用相似狀態機的方法,相似Symbian的活動對象將一個複雜的事情,分段執行。 開發
3. UI線程中不要處理過多的內容,好比將一個5MB的文本,讓TextView去setText,要知道這種UI操做,沒有什麼好方法去解決的,因此Android123提示,遇到UI中須要執行復雜的操做,能夠參考上面2提到的分段處理方式。get