Поймать все исключения типа программирования Android - PullRequest
15 голосов
/ 25 апреля 2011

Я разрабатываю приложение для ОС Android. Так как это мое первое приложение, я думаю, что допустил некоторые ошибки в программировании, потому что вряд ли смогу отследить ошибки до их причин. Таким образом, я догадывался, хотя я пытаюсь исправить ошибки, есть ли способ перехватить ВСЕ типы исключений во всем жизненном цикле активности с помощью одной попытки?

Это было бы здорово, мне скучно смотреть, как моя галактика S говорит: "Извините, приложение неожиданно остановилось": (

Ответы [ 4 ]

20 голосов
/ 25 апреля 2011

Я действительно, действительно, не рекомендую это ...

try {
     ...
} catch (Exception e) {
     // This will catch any exception, because they are all descended from Exception
}

Вы просматриваете свои следы стека, чтобы отладить свои проблемы?Не должно быть трудно выследить их.Посмотрите на LogCat и просмотрите большой блок красного текста, чтобы увидеть, какой метод вызвал ваш сбой и в чем ваша ошибка.

Если вы поймаете все свои ошибки таким образом, ваша программа будет работать не так, как ожидалось, ивы не будете получать отчеты об ошибках от Android Market, когда ваши пользователи сообщают о них.

Вы можете использовать UncaughtExceptionHandler, чтобы, возможно, предотвратить некоторые сбои.Я использую один, но только для печати трассировки стека в файл, когда я отлаживаю приложение на телефоне вдали от компьютера.Но после того, как я это сделаю, я передаю необработанное исключение стандартному Android UncaughtExceptionHandler, потому что я хочу, чтобы Android мог правильно его обрабатывать, и предоставляю пользователю возможность отправлять мне трассировку стека.

7 голосов
/ 25 апреля 2011

Я полагаю, как чистый Java

try {

} catch(throwable t) {

}

Но это очень плохая практика.

Также посмотрите на

Установка обработчика UncaughtException

1 голос
/ 26 апреля 2012
import java.io.FileOutputStream;
import java.io.IOException;

import android.app.Activity;
import android.content.Context;

public class SRSDexception implements Thread.UncaughtExceptionHandler {

private Thread.UncaughtExceptionHandler defaultUEH;

private Activity app = null;

public SRSDexception(Activity app) {
this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
    this.app = app;

}

public void uncaughtException(Thread t, Throwable e) 
{   

StackTraceElement[] arr = e.getStackTrace();
String Raghav =t.toString();
String report = e.toString()+"\n\n";
report += "--------- Stack trace ---------\n\n"+Raghav;
for (int i=0; i<arr.length; i++)
{
report += "    "+arr[i].toString()+"\n";
}
report += "-------------------------------\n\n";

// If the exception was thrown in a background thread inside
// AsyncTask, then the actual exception can be found with getCause
report += "--------- Cause ---------\n\n";
Throwable cause = e.getCause();
if(cause != null) {
report += cause.toString() + "\n\n";
arr = cause.getStackTrace();
for (int i=0; i<arr.length; i++)
{
report += "    "+arr[i].toString()+"\n";
}
}
report += "-------------------------------\n\n";

try {
FileOutputStream trace = app.openFileOutput(
"stack.trace", Context.MODE_PRIVATE);
trace.write(report.getBytes());
trace.close();
} catch(IOException ioe) {
// ...
}

defaultUEH.uncaughtException(t, e);
}

}
1 голос
/ 25 апреля 2011

Если вы находитесь в Eclipse, все исключения, которые принудительно закрывают приложение (также упоминаемое вами сообщение), должны регистрироваться в "LogCat".

Самый простой способ увидеть LogCat - это открыть перспективу DDMS и щелкнуть по вкладке LogCat (или открыть ее из меню «Вид», если она еще не отображается).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...