安卓异常处理最佳实践?

2022-08-31 12:24:12

如果我的应用崩溃了,它会挂起几秒钟,然后Android会告诉我,该应用崩溃了,需要关闭。因此,我正在考虑使用一般方法捕获我应用程序中的所有异常:

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

并制作一个新的解释应用程序立即崩溃(并且还让用户有机会发送带有错误详细信息的邮件),而不是由于Android而延迟。有没有更好的方法来实现这一目标,还是不鼓励这样做?Activity

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


答案 1

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

在这里,您创建一个类,说异常处理者..implements java.lang.Thread.UncaughtExceptionHandler

在这个课程中,您将完成挽救生命的事情,例如创建堆栈跟踪并准备上传错误报告等。

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

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);
    }
}

答案 2

您只需使用通用警报对话框即可快速显示错误消息。例如。。。

//******************************************
//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();
}

您还可以在此方法中添加其他错误处理选项,例如打印堆栈跟踪


推荐