나는 나의 Activity
에서 현재 스레드에 대한 기본 UncaughtExceptionHandler
설정의 onCreate()
내 AlertDialog
에서 RunTimeException
던져의 onClick()
리스너를하지만, 예외가 잡힌되지 않습니다. 나는 또한 onCreateOptionsMenu()
과 onOptionsItemSelected()
에서 예외를 던지려고했는데 잡히지 않았다. onCreate()
또는 onResume()
에서 던져지면 잡힐 수 있습니다. 여기 스레드의 DefaultUncaughtExceptionHandler 잡기되지 예외() 메소드
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