Android兩種常見錯誤-ANR和FC(Force close)

desaco發表於2016-01-27

ANR(Activity Not Respone)(無響應)

    先介紹下Main執行緒(也稱為UI執行緒、主執行緒)

    功能: 1.建立UI控制元件

             2.更新UI控制元件狀態

             3.事件處理

    限制:Main執行緒不建議有超過5秒的事件

    出現條件:

        當使用者輸入事件5s內沒有得到響應,將彈出ANR對話方塊

        廣播接收者的onReceive()執行時間超過10s

    解決方案(原則):

        所有可能的耗時操作都要在子執行緒()中執行

        常見耗時操作:

            I/O:網路操作

                   SDcard 

            資料運算


FC(Force close)

    原因:

        1.Error

        OOM(out of memory error)

        StackOverFlowError

        2.RuntimeException

    解決辦法:

        看日誌


    子執行緒不能更新UI的解決思路:

       1、 將子執行緒執行結果傳送到Main執行緒:handler+massage執行緒間通訊

            傳送訊息:

                        Message msg = mHandler.obtainMessage(UPLOADjson);     

                        mHandler.sendMessage(msg);

            接收訊息:

        public void handleMessage(Message msg) {

            switch (msg.what) {

            case UPLOAD:

                mTextView2.setText((String) msg.obj);

            break;

            case DOWNLOAD:

                mTextView.setText((String) msg.obj);

                break;

            default:

                break;

            }

        }


      2、 使更新ui程式碼段在Main執行緒執行:

        1.runOnUiThread

        2.view.post view.postDelay()

        3.handler.post handler.postDelay()

相關文章