ANR異常的產生和解決方案
阿新 • • 發佈:2019-02-18
1.概念解釋:
ANR : Application No Response。
在Android中,應用的響應性被活動管理器(Activity Manager)和視窗管理器(Window Manager)這兩個系統服務所監視。當用戶觸發了輸入事件(如鍵盤輸入,點選按鈕等),如果應用5秒內沒有響應使用者的輸入事件,那麼,Android會認為該應用無響應,便彈出ANR對話方塊。
2.用程式碼模擬:在主執行緒sleep8s.
public void click(View view) {
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
超過5秒,沒有響應輸入事件,彈出對話方塊:
3.為什麼要彈出ANR異常?==》提升使用者的體驗
4.原理:android啟動應用程式,開啟一個程序,再 只開啟一個單一的執行緒,該執行緒也稱為主執行緒,主執行緒主要用於建立檢視,顯示檢視,與使用者互動(對檢視控制元件的監聽),對主執行緒也稱為UI執行緒,對於耗時的操作,不應該在主執行緒執行,會影響與使用者的互動
5.如何解決:
對於耗時的操作,比如訪問網路、訪問資料庫等操作,需要開闢子執行緒,在子執行緒處理耗時的操作,主執行緒主要實現UI的操作(建立、顯示、互動)。這涉及到了子執行緒與主執行緒通訊的問題。
6.解決子執行緒與主執行緒通訊問題:
(1)Thread-Handler-Message
(2)AsyncTask :這裡面也封裝了Handler
-