Android异常处理最佳实践?

时间:2013-05-15 09:42:04

标签: java android exception-handling

如果我的应用程序崩溃,它会挂起几秒钟才会被Android告知该应用程序崩溃并需要关闭。所以我想用我的应用程序捕获所有异常:

try {
    // ... 
} catch(Exception e) { 
    // ...
} 

创建一个新的Activity,解释应用程序立即崩溃(并且还让用户有机会发送包含错误详细信息的邮件),而不是因为Android而导致延迟。是否有更好的方法来实现这一点,或者这是否沮丧?

更新:我正在使用支持ART的Nexus 5,我没有注意到我曾经遇到的应用程序崩溃的延迟(我最初谈论的“悬挂”)。我认为,因为现在一切都是本机代码,崩溃会立即发生,同时获取所有崩溃信息。也许Nexus 5只是快速:)无论如何,这可能不会成为未来Android版本的担忧(鉴于ART将成为Android L中的默认运行时)。

3 个答案:

答案 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

希望这有助于某人