1. 程式人生 > >ANR異常的產生和解決方案

ANR異常的產生和解決方案

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

   -