ANR:Application Not Responding(應用程序無響應).當出現下列情況時,Android就會顯示ANR對話框了:
對輸入事件(如按鍵、觸摸屏事件)的響應超過5秒 意向接受器(intentReceiver)超過10秒鍾仍未執行完
畢Android應用程序完全運行在一個獨立的線程中。這就意味着,任何在主線程中運行的,
需要消耗大量時間的操作都會引發ANR。那么如何避免呢?可以用兩種方式:
1.
AsyncTask異步任務中,doInBackground()和onPostExecute(Result)兩個方法非常重要
doInBackground() 這個方法運行在后台線程中,主要負責執行那些很耗時的操作,如移動
護理系統中的網絡連接、解析XML等操作。該方法必須重載。onPostExecute(Result)
這個方法也運行於UI線程,在doInBackground(Params…)方法執行后調用,該方法用於
處理后台任務執行后返回的結果。
2. Thread子線程 + handler
- Handler mHandler = new Handler(){
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- switch (msg.what) {
- case 0:
- //do something,refresh UI;
- break;
- default:
- break;
- }
- }
- };
你可以創建一個message對象,他可以發送對象,參數,用handler對象發送消息,接收到上面,判斷消息,進行ui操作。