Мне было интересно, возможно ли остановить сбой в Android-приложении, захватив упомянутый сбой в родительской активности.
Предположим, что я вызываю Неустранимое исключение в методе onCreate для дочерней активности, смогу ли я вообще зафиксировать это исключение? Или произойдет сбой приложения независимо от того, что я пробую?
Вот пример того, что я имею в виду:
Main.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ly_main);
// My Main activity starts
try{
// Call the next activity
Intent intent = new Intent(getApplicationContext(), Child.class);
startActivity(intent);
}catch(Exception e){
Log.wtf("Exception_WTF","Exception from child activity woohoo \n "+ e.toString());
}
Child.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ly_child);
// Create exception... for science
int a = 0;
a = 1/a;
}
Это не работает. Детская активность умирает и берет с собой родителя.
Можно ли сделать это через startActivityForResult?
Спасибо,
Изменить: мне не нужны данные о сбоях, я просто хочу знать, как я могу избежать сбоя приложения.
Оглядевшись, я обнаружил: Использование глобальной обработки исключений на Android
который включает эту часть:
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread paramThread, Throwable paramThrowable) {
Log.e("Alert","Lets See if it Works !!!");
}
});
Что позволяет мне регистрировать uncaughtException, избегая "Crash", тем не менее, приложение пошло на черный экран и перестало отвечать...
Изменить 2: После многого чтения (спасибо user370305) в потоке Как получить аварийные данные из приложения для Android?
Я зашел в тупик, либо я обрабатываю uncaughtException, и вызываю defaultUEH.uncaughtException(paramThread, paramThrowable); поэтому приложение Crashes, или я не вызываю defaultUEH.uncaughtException, приложение не разбивается, но не отвечает ни... Любые идеи?
final Thread.UncaughtExceptionHandler defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread paramThread, Throwable paramThrowable) {
Log.e("Alert","Lets See if it Works !!!");
defaultUEH.uncaughtException(paramThread, paramThrowable);
});