Android异常处理最佳实践?

lda*_*dam 72 java android exception-handling

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

try {
    // ... 
} catch(Exception e) { 
    // ...
} 
Run Code Online (Sandbox Code Playgroud)

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

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

CRU*_*DER 95

在这里,检查链接以供参考.

在这里你创建一个类,说ExceptionHandler,implements java.lang.Thread.UncaughtExceptionHandler..

在这个课程中,你将做一些拯救生命的事情,如创建堆栈跟踪和准备上传错误报告等....

现在是重要的部分,即如何捕获该异常.虽然很简单.在overriden onCreate方法中调用super方法之后,复制每个Activity中的以下代码行.

Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));
Run Code Online (Sandbox Code Playgroud)

您的活动可能看起来像这样......

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助...

  • 或者只需将该行添加一次到BaseActivity并在整个应用程序中将此Activity子类化. (8认同)

Lou*_*ans 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();
}
Run Code Online (Sandbox Code Playgroud)

您还可以在此方法中添加其他错误处理选项,例如print stacktrace