【发布时间】:2011-09-03 10:50:23
【问题描述】:
在我的 Android 应用程序中,我尝试将 Try Catch 块放在所有可能的位置。但是,我想避免由于任何未处理的错误而导致应用程序崩溃。我怎样才能做到这一点?
我使用了Thread.setDefaultUncaughtExceptionHandler(handler);,但这只会帮助我获取崩溃数据,对吗?
【问题讨论】:
标签: android exception-handling
在我的 Android 应用程序中,我尝试将 Try Catch 块放在所有可能的位置。但是,我想避免由于任何未处理的错误而导致应用程序崩溃。我怎样才能做到这一点?
我使用了Thread.setDefaultUncaughtExceptionHandler(handler);,但这只会帮助我获取崩溃数据,对吗?
【问题讨论】:
标签: android exception-handling
你为什么要这样做?
如果您可以在某些地方捕获异常并做一些有意义的事情,即显示有用的警告,然后以一致且可用的状态继续应用程序,那么很好。
如果你不能采取任何有意义的行动,那就让失败发生吧。有很多方法可以通知您由此产生的故障,因此您可以修复它们:例如,查看ACRA。或者,Android 开发者控制台现在将报告您在市场上分发的应用程序失败。
【讨论】:
我建议你阅读 ACRA here
【讨论】:
所有错误和异常都从 Throwable 扩展而来。通过捕获 Throwable,可以处理所有意外情况。但是捕捉错误不会有任何结果。您可以在应用程序崩溃之前在 catch 块中做某事
【讨论】:
【讨论】:
您可以使用以下方式:
public class MyApplication extends Application
{
public void onCreate ()
{
// Setup handler for uncaught exceptions.
Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler()
{
@Override
public void uncaughtException (Thread thread, Throwable e)
{
handleUncaughtException (thread, e);
}
});
}
// here you can handle all unexpected crashes
public void handleUncaughtException (Thread thread, Throwable e)
{
e.printStackTrace(); // not all Android versions will print the stack trace automatically
Intent intent = new Intent ();
intent.setAction ("com.mydomain.SEND_LOG"); // see step 5.
intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); // required when starting from Application
startActivity (intent);
System.exit(1); // kill off the crashed app
}
}
这将处理您的应用意外崩溃,这取自 that answer。
【讨论】:
System.exit()杀掉了这个应用?如果崩溃是不影响视图或功能的事情,难道不能让它继续运行吗?