Android中的ANR

來源:互聯網
上載者:User

         ANR ( “Application Not Responding”),意思是“應用沒有響應”。

在如下情況下,Android會報出ANR錯誤:

        –主線程 (事件處理線程/UI線程) 在5秒內沒有響應輸入事件

        –BroadcastReceiver 沒有在10秒內完成返回 

1、在主線程內進行網路操作

2、在主線程內進行一些緩慢的磁碟操作(例如執行沒有最佳化過的SQL查詢)

       應用程式應該在5秒或者10秒內響應,否則使用者會覺得“這個應用很垃圾”“爛”“慢”…等等

邏輯應該是在一個單獨的線程中進行網路或資料庫等耗時操作,操作完成後通過Handler更新UI。
       private Thread mthread;
      private Handler mhandler;
      mthread = new Thread(runnable);//這裡是在主線程中建立一個子線程,不會阻塞UI
      mthread.start();

      private Runnable runnable = new Runnable (){
            void run(){
                //做耗時的資料處理
                //處理完畢
                mhandler.sendEmptyMessge(1000);//這裡發訊息通知UI可以更新了
           }

       };

      mhandler = new Handler(){
              void handleMessgae(Message msg){
                     if(msg.what == 1000){
                          //更新UI
                    }
                    super.handlMessgae();
              }
       };

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.