Androidエラーthreadid=1:thread exiting with uncaught
2733 ワード
Androidエラーthreadid=1:thread exiting with uncaught exception(group=0 x 416298 c 8)
プロジェクト開発でテスト中にクラッシュした場合、エラーはスレッドにキャプチャされていない異常があることを意味します.通常、例外の使用をキャプチャ
しかし、スレッドプールでは、タスクの実行中にスレッドプールがすべての例外をキャプチャし、スレッド内のすべての例外が放出された例外をキャプチャできません.すなわちtry catchは異常をキャプチャできません.Javaには次のように記述されたインタフェースがあります.
Threadクラスのメソッドの1つ
このようなインタフェースUncaughtExceptionHandlerを実装し、プログラムのメインスレッドにプロセッサを設定する必要があります.コードは次のとおりです.
スレッド内の例外をキャプチャできません.メソッドを呼び出す必要があります.
OnCreateメソッドで呼び出せばいいです
完全なコードは次のとおりです.
これにより、再実行するとスレッド内の例外がキャプチャされ、プロジェクトが直接クラッシュすることはありません.
プロジェクト開発でテスト中にクラッシュした場合、エラーはスレッドにキャプチャされていない異常があることを意味します.通常、例外の使用をキャプチャ
try {
} catch (Exception e) {
}
しかし、スレッドプールでは、タスクの実行中にスレッドプールがすべての例外をキャプチャし、スレッド内のすべての例外が放出された例外をキャプチャできません.すなわちtry catchは異常をキャプチャできません.Javaには次のように記述されたインタフェースがあります.
static interface Thread.UncaughtExceptionHandler // Thread , 。
Threadクラスのメソッドの1つ
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);
}
}
スレッド内の例外をキャプチャできません.メソッドを呼び出す必要があります.
Thread.setDefaultUncaughtExceptionHandler(this);
OnCreateメソッドで呼び出せばいいです
@Override protected void onCreate(Bundle savedInstanceState) { // OnCreate , , uncaughtException Thread.setDefaultUncaughtExceptionHandler(this);
}
完全なコードは次のとおりです.
// 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);
}
これにより、再実行するとスレッド内の例外がキャプチャされ、プロジェクトが直接クラッシュすることはありません.