如果我的应用程序崩溃,它会挂起几秒钟才会被Android告知该应用程序崩溃并需要关闭。所以我想用我的应用程序捕获所有异常:
try {
// ...
} catch(Exception e) {
// ...
}
创建一个新的Activity
,解释应用程序立即崩溃(并且还让用户有机会发送包含错误详细信息的邮件),而不是因为Android而导致延迟。是否有更好的方法来实现这一点,或者这是否沮丧?
更新:我正在使用支持ART的Nexus 5,我没有注意到我曾经遇到的应用程序崩溃的延迟(我最初谈论的“悬挂”)。我认为,因为现在一切都是本机代码,崩溃会立即发生,同时获取所有崩溃信息。也许Nexus 5只是快速:)无论如何,这可能不会成为未来Android版本的担忧(鉴于ART将成为Android L中的默认运行时)。
答案 0 :(得分:91)
在此处,检查link for reference。
在这里,你创建了一个类{strong> ExceptionHandler ,implements java.lang.Thread.UncaughtExceptionHandler
..
在这个课程中,你将做一些拯救生命的事情,比如创建堆栈跟踪和准备好上传错误报告等等。
现在是重要部分,即如何捕获该异常。
虽然很简单。在覆盖onCreate
方法中调用super方法之后,复制每个Activity中的以下代码行。
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));
您的活动可能看起来像这样......
public class ForceClose extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));
setContentView(R.layout.main);
}
}
希望这会有所帮助......
答案 1 :(得分:9)
您可以使用通用警报对话框快速显示错误消息。 例如......
//******************************************
//some generic method
//******************************************
private void doStuff()
{
try
{
//do some stuff here
}
catch(Exception e)
{
messageBox("doStuff", e.getMessage());
}
}
//*********************************************************
//generic dialog, takes in the method name and error message
//*********************************************************
private void messageBox(String method, String message)
{
Log.d("EXCEPTION: " + method, message);
AlertDialog.Builder messageBox = new AlertDialog.Builder(this);
messageBox.setTitle(method);
messageBox.setMessage(message);
messageBox.setCancelable(false);
messageBox.setNeutralButton("OK", null);
messageBox.show();
}
您还可以在此方法中添加其他错误处理选项,例如print stacktrace
答案 2 :(得分:3)
我在Log类中找到了“wtf”(这是一个可怕的失败)方法。从描述:
根据系统配置,可能会将报告添加到 DropBoxManager和/或进程可能会立即终止 错误对话框。
http://developer.android.com/reference/android/util/Log.html
希望这有助于某人