Android錯誤threadid=1: thread exiting with uncaught

Android錯誤threadid=1: thread exiting with uncaught exception (group=0x416298c8) java

在項目開發中測試時崩潰,錯誤如上 
該錯誤的意思是線程中存在沒有捕獲到的異常。通常狀況下捕獲異常使用 ide

try {
 } catch (Exception e) {
 }



可是在線程池中,線程池在執行任務時捕獲了全部異常,這樣一來線程中全部的異常都沒法捕獲到拋出的異常。 
即 try catch 捕獲不到異常了。 
Java中有一個接口,UncaughtExceptionHandler 描述以下: oop

static interface Thread.UncaughtExceptionHandler // 當 Thread 因未捕獲的異常而忽然終止時,調用處理程序的接口。



Thread類中的一個方法 post

static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) //設置當線程因爲未捕獲到異常而忽然終止,而且沒有爲該線程定義其餘處理程序時所調用的默認處理程序。

咱們須要實現這樣一個接口UncaughtExceptionHandler,而後在程序的主線程中設置處理程序。 
代碼以下 測試

import java.lang.Thread.UncaughtExceptionHandler; //implements UncaughtExceptionHandler public class Other extends Activity implements UncaughtExceptionHandler { //必須實現接口uncaughtException @Override public void uncaughtException(Thread arg0, Throwable arg1) { //在此處理異常, arg1即爲捕獲到的異常  Log.i("AAA", "uncaughtException   " + arg1);
    }

}



如今還沒法捕獲到線程中的異常,還須要調用一個方法 this

Thread.setDefaultUncaughtExceptionHandler(this);

在OnCreate方法中調用一下便可 線程

@Override protected void onCreate(Bundle savedInstanceState) { //在OnCreate方法中調用下面方法,而後再使用線程,就能在uncaughtException方法中捕獲到異常 Thread.setDefaultUncaughtExceptionHandler(this);
}

完整代碼以下 code

//導入包 import java.lang.Thread.UncaughtExceptionHandler; //implements UncaughtExceptionHandler public class Other extends Activity implements UncaughtExceptionHandler       {

    @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState);
        setContentView(R.layout.th); //在此調用下面方法,才能捕獲到線程中的異常 Thread.setDefaultUncaughtExceptionHandler(this); //獲取建立的 Button btn1 = (Button) findViewById(R.id.btn); //給btn1添加一個點擊監聽事件 btn1.setOnClickListener(new OnClickListener() {
            @Override public void onClick(View arg0) { //調用我本身的方法 Init();
            }
        });
    } public void Init() { //開啓線程 new Handler(Looper.getMainLooper()).post(new Runnable() {   
            @Override public void run() { //此處的 try catch 是沒法捕獲到異常的 try { ////////////////////////////////////////// //須要在線程中調用的方法purchase.init(context, iapListener) purchase.init(context, iapListener); ////////////////////////////////////////// } catch (Exception e) { // TODO: handle exception Log.i("AAA", "INIG   " + e);
                    e.printStackTrace();
                }
            }
        });
    } //必須實現接口uncaughtException @Override public void uncaughtException(Thread arg0, Throwable arg1) { //在此處理異常, arg1即爲捕獲到的異常 Log.i("AAA", "uncaughtException   " + arg1);
    }

這樣再次運行就會捕獲到線程中的異常,不會致使項目直接崩潰 接口

相關文章
相關標籤/搜索