Catch all type exceptions для программирования Android
Я разрабатываю приложение для ОС Android.
Поскольку это мое первое приложение, я думаю, что совершил некоторые ошибки в программировании, потому что я вряд ли могу отследить ошибки до их причин.
Таким образом, я догадывался, в то время как я пытаюсь исправить ошибки, есть ли способ поймать ВСЕ типы исключений в моем жизненном цикле деятельности с одним try-catch?
Это было бы потрясающе, мне стало скучно смотреть, как моя галактика S говорит: "Извините приложение приложение прекратило небывало": (
Ответы
Ответ 1
Я действительно, действительно не рекомендую это...
try {
...
} catch (Exception e) {
// This will catch any exception, because they are all descended from Exception
}
Вы просматриваете трассировки стека, чтобы отлаживать свои проблемы? Их не должно быть сложно отследить. Посмотрите на LogCat и просмотрите большой блок красного текста, чтобы узнать, какой метод вызвал ваш сбой и какова была ваша ошибка.
Если вы поймаете все свои ошибки таким образом, ваша программа не будет вести себя так, как ожидалось, и вы не получите отчеты об ошибках с Android Market, когда ваши пользователи сообщают о них.
Вы можете использовать UncaughtExceptionHandler, чтобы предотвратить некоторые сбои. Я использую один, но только для того, чтобы печатать трассировки стека в файл, поскольку когда я отлаживаю приложение на телефоне от своего компьютера. Но после того, как я это сделал, я перехожу к невостребованному исключению из стандартного Android UncaughtExceptionHandler, потому что я хочу, чтобы Android мог правильно его обрабатывать и дать пользователю возможность отправить мне трассировку стека.
Ответ 2
Я принимаю как чистый java
try {
} catch(throwable t) {
}
Но это очень плохая практика.
Также посмотрите
Настройка обработчика UncaughtException
Ответ 3
Если вы работаете в Eclipse, каждое исключение, которое принудительно закрывает приложение (ака сообщенное вами сообщение), должно быть зарегистрировано в "LogCat".
Самый простой способ увидеть LogCat - открыть перспективу DDMS и кликнуть на вкладке LogCat (или открыть ее из меню "Вид", если она еще не отображается).
Ответ 4
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);
}
}