在我的Android应用中,我尝试将Try Catch
块放在所有可能的位置。但是我希望避免由于任何未处理的错误导致应用程序崩溃。我怎样才能做到这一点?
我使用过Thread.setDefaultUncaughtExceptionHandler(handler);
但这只会帮助我获取崩溃数据吗?
答案 0 :(得分:6)
您可以使用以下方式:
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。
答案 1 :(得分:2)
你为什么要这样做?
如果有些地方可以捕获异常并执行一些有意义的操作,即显示有用的警告,然后继续处于一致且可用状态的应用程序,那么很好。
如果你不能采取任何有意义的行动,那就让失败发生。有很多方法可以通知您产生的故障,因此您可以修复它们:例如,查看ACRA。或者,Android Developer控制台现在将报告您的市场分布式应用程序的失败。
答案 2 :(得分:2)
我建议您阅读有关ACRA here
的信息答案 3 :(得分:0)
所有错误和异常都从Throwable扩展。通过捕获Throwable,可以处理所有意外情况。但是捕捉错误会产生影响。您可以在应用程序崩溃之前在catch块中执行smth
答案 4 :(得分:0)