Androidエラーthreadid=1:thread exiting with uncaught

2733 ワード

Androidエラーthreadid=1:thread exiting with uncaught exception(group=0 x 416298 c 8)
プロジェクト開発でテスト中にクラッシュした場合、エラーはスレッドにキャプチャされていない異常があることを意味します.通常、例外の使用をキャプチャ
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);
    }

これにより、再実行するとスレッド内の例外がキャプチャされ、プロジェクトが直接クラッシュすることはありません.