首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android异常处理的最佳实践?

Android异常处理的最佳实践?
EN

Stack Overflow用户
提问于 2013-05-15 17:42:04
回答 3查看 88.2K关注 0票数 81

如果我的应用程序崩溃,它会挂起几秒钟,然后Android会告诉我应用程序崩溃了,需要关闭。所以我在考虑用一个通用的命令来捕获我应用中的所有异常:

代码语言:javascript
复制
try {
    // ... 
} catch(Exception e) { 
    // ...
} 

并创建一个新的Activity,解释应用程序立即崩溃(同时也让用户有机会发送包含错误详细信息的邮件),而不是由于安卓系统的延迟。有没有更好的方法来实现这一点,或者这是不被鼓励的?

更新:我使用的是一台支持ART的Nexus5,我没有注意到应用程序崩溃时的延迟(我最初说的“挂起”)。我认为既然现在一切都是本机代码,崩溃就会随着所有崩溃信息的获得而立即发生。也许Nexus 5很快:)不管怎样,这在未来的Android版本中可能不会成为一个担忧(考虑到ART将成为Android L中的默认运行时)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-15 18:34:46

在这里,检查link for reference

在这里,您将创建一个名为ExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler的类。

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

现在来了重要的部分,也就是如何捕获异常。虽然这很简单。将下面的代码行复制到每个活动中,紧跟在被覆盖的onCreate方法中的超级方法调用之后。

代码语言:javascript
复制
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));

您的活动可能类似于下面的…

代码语言:javascript
复制
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);
    }
}

希望这能帮到你。

票数 105
EN

Stack Overflow用户

发布于 2013-08-09 17:40:47

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

代码语言:javascript
复制
//******************************************
//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();
}

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

票数 9
EN

Stack Overflow用户

发布于 2014-03-16 23:19:55

我在Log类中发现了"wtf“(多么可怕的失败)方法。从描述中可以看出:

根据系统配置,可能会将报告添加到DropBoxManager和/或进程可能会立即终止并显示错误对话框。

http://developer.android.com/reference/android/util/Log.html

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16561692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档