Я считаю, что это ожидаемое поведение закрытия сил. Пользователь получает уведомление об исключении, когда они подтверждают его, система пытается вернуть их как можно ближе к их текущему состоянию, то есть к последнему действию, которое сработало.
Я не уверен, почему такое поведение нежелательно, но вам, вероятно, нужно придумать свой собственный способ распознавания, что действие было перезапущено из-за сбоя, и немедленно выйти из onCreate.
Edit:
Я просто собрал тестовое приложение:
public class Activity1 extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button)findViewById(R.id.button);
button.setText("test");
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Activity1.this, Activity2.class);
startActivityForResult(intent, 0);
}
});
}
}
public class Activity2 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button)findViewById(R.id.button);
button.setText("test2");
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
throw new RuntimeException();
}
});
}
}
Когда вы нажимаете кнопку в Test2, возникает исключение. Android показывает диалоговое окно принудительного закрытия, и когда вы нажимаете OK в диалоговом окне, вы возвращаетесь в Test. Вот что я имел в виду под поведением по умолчанию.
Лучший способ справиться с этим - исправить приложение так, чтобы оно никогда не выдавало исключение.
В качестве последнего средства вы можете добавить обработчик для обработки необработанных исключений: uncaughtExceptionHandler . Это предотвращает отображение диалогового окна принудительного закрытия, поэтому вы можете делать все, что захотите.