什么是ANR?如何避免?


ANRApplication Not Responding(應用程序無響應).當出現下列情況時,Android就會顯示ANR對話框了:  

對輸入事件(如按鍵、觸摸屏事件)的響應超過5秒 意向接受器(intentReceiver)超過10秒鍾仍未執行完

Android應用程序完全運行在一個獨立的線程中。這就意味着,任何在主線程中運行的,

需要消耗大量時間的操作都會引發ANR。那么如何避免呢?可以用兩種方式:

1.

 AsyncTask異步任務中,doInBackground()onPostExecute(Result)兩個方法非常重要

 

doInBackground() 這個方法運行在后台線程中,主要負責執行那些很耗時的操作,如移動

 

護理系統中的網絡連接、解析XML等操作。該方法必須重載。onPostExecute(Result)

 

這個方法也運行於UI線程,在doInBackground(Params)方法執行后調用,該方法用於

 

處理后台任務執行后返回的結果。

 

2.  Thread子線程 + handler

 

  1. Handler mHandler = new Handler(){  
  2.   
  3.     @Override  
  4.     public void handleMessage(Message msg) {  
  5.         super.handleMessage(msg);  
  6.         switch (msg.what) {  
  7.         case 0:  
  8.             //do something,refresh UI;  
  9.             break;  
  10.         default:  
  11.             break;  
  12.         }  
  13.     }  
  14.       
  15. };  

你可以創建一個message對象,他可以發送對象,參數,用handler對象發送消息,接收到上面,判斷消息,進行ui操作。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM