でスローされた例外をキャッチしていない私は私のActivity
で現在のスレッドのデフォルトUncaughtExceptionHandler
を設定年代onCreate()
と私のAlertDialog
からRunTimeException
を投げる年代onClick()
リスナーが、例外がキャッチされていません。私もonCreateOptionsMenu()
とonOptionsItemSelected()
から例外を投げてみましたが、それは捕まえられませんでした。しかし、それはonCreate()
またはonResume()
からスローされたとき捕らえられます。ここでスレッドのDefaultUncaughtExceptionHandler AlertDialogのonClick()メソッド
は私の活動です:
public class MainActivity extends AppCompatActivity implements DialogInterface.OnClickListener {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Thread.setDefaultUncaughtExceptionHandler(new DefExcHandler());
Log.d(TAG, "onCreate: "+Thread.currentThread().getName()+" "+Thread.currentThread().getId());
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setNeutralButton("CRASH", this);
AlertDialog dialog = builder.create();
dialog.show();
dialog.setCancelable(false);
dialog.setCanceledOnTouchOutside(false);
}
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
Log.d(TAG, "onClick: "+Thread.currentThread().getName()+" "+Thread.currentThread().getId());
throw new RuntimeException();
}
}
そしてここでは、私の例外ハンドラです:私は私の活動にスレッドがときonCreate()
とonClick()
で同じであることを確認してくださいログメッセージに基づいて
public class DefExcHandler implements Thread.UncaughtExceptionHandler {
private static final String TAG = "DefExcHandler";
public DefExcHandler() {
Log.d(TAG, "DefaultExceptionHandler: ");
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
Log.d(TAG, "Uncaught exception caught: "+ex.getMessage()+" "+ex.getCause().toString());
}
}
:
09-27 15:00:57.260 10667-10667/a.b.c D/MainActivity: onCreate: main 1
09-27 15:01:52.680 10667-10667/a.b.c D/MainActivity: onClick: main 1
例外がキャッチされないのはなぜですかonClick()
、onCreateOptionsMenu()
またはonOptionsItemSelected()
からスローされたとき?
ログメッセージによって実際に問題が発生しました。非常に奇妙な行動 – batati