Android异常处理最佳实践?

     2023-02-23     118

关键词:

【中文标题】Android异常处理最佳实践?【英文标题】:Android exception handling best practice? 【发布时间】:2013-05-09 19:50:37 【问题描述】:

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

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

并创建一个新的Activity,说明应用程序立即崩溃(并且还让用户有机会发送包含错误详细信息的邮件),而不是由于 Android 出现延迟。有没有更好的方法来实现这一点,还是不鼓励这样做?

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

【问题讨论】:

请check link 当崩溃发生时,您的活动被破坏,因此无法自己处理崩溃。 @Raghunandan 是的,但是如果由于未处理的异常而发生崩溃,您可以使用通用的捕获所有异常处理程序并防止它完全崩溃。 @LoganDam 有什么办法吗? @mattblang 实际上,我已经有一段时间没有碰过我的安卓设备了,工作一直很疯狂。不过可能很快就会再次回到安卓世界。 CRUSADER 的选项看起来就像我读过的书一样。 【参考方案1】:

我在 Log 类中找到了“wtf”(多么可怕的失败)方法。来自描述:

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

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

【讨论】:

【参考方案2】:

在这里,检查link for reference。

在这里你创建一个类说 ExceptionHandlerimplements java.lang.Thread.UncaughtExceptionHandler..

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

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

Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));

您的 Activity 可能看起来像这样……

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

希望这会有所帮助...

【讨论】:

您的示例活动没有实现UncaughtExceptionHandler :) 感谢您的回答,我下班回家后试试。 另外,是否应该将Thread.setDefaultUncaughtExceptionHandler() 放在您的主要/第一个活动中,以便处理应用程序中的所有异常? 我说,要创建一个类说 ExceptionHandler 实现 java.lang.Thread.UncaughtExceptionHandler.... 然后在你的正常活动中添加上面提到的代码行......请参考上面提到的链接以获取更广泛的想法.. @CRUSADER 非常感谢您作为参考链接提到的链接工作正常。 或者只需将该行添加一次到 BaseActivity 并在整个应用中子类化此 Activity。【参考方案3】:

您可以只使用通用警报对话框来快速显示错误消息。 比如……

//******************************************
//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

【讨论】:

可能您应该在向用户显示错误消息之前对其进行处理

译《异常最佳实践》

...spx译文:设计优秀的应用程序能够处理运行过程中出现的异常和错误以避免应用程序崩溃。这篇文章描述了关于处理与创建异常的最佳实践。处理异常合适地使用异常处理代码(try/catch块)。(因为)同样可以通过编程检 查看详情

java异常处理最佳实践及陷阱防范

...工作还是生活中,总会出现各种“错误”,各种突发的“异常”。无论我们做了多少准备,多少测试,这些异常总会在某个时间点出现,如果处理不当或是不及时,往往还会导致其他新的问题出现。所以我们要时刻注意这些陷阱... 查看详情

java处理异常9个最佳实践(代码片段)

...Resource语句使用FinallyJava7的Try-With-Resource语句2.给出准确的异常处理信息3.记录你所指定的异常4.使用描述性消息抛出异常5.最先捕获特定的异常6.不要在catch中使用Throwable7.不要忽略Exceptions8.不要记录和抛出一个异常9.包装异常总结... 查看详情

如何使用 try catch 进行异常处理是最佳实践

】如何使用trycatch进行异常处理是最佳实践【英文标题】:Howusingtrycatchforexceptionhandlingisbestpractice【发布时间】:2013-02-0502:06:22【问题描述】:在维护我同事的代码时,即使是自称是高级开发人员的人,我也经常看到以下代码:tr... 查看详情

Django - 异常处理最佳实践和发送自定义错误消息 [关闭]

】Django-异常处理最佳实践和发送自定义错误消息[关闭]【英文标题】:Django-exceptionhandlingbestpracticeandsendingcustomizederrormessage[closed]【发布时间】:2016-12-1507:19:17【问题描述】:我开始考虑在我的Django应用程序中进行适当的异常处... 查看详情

在线程中处理在 catch 块中抛出的异常的最佳实践。 (。网)

】在线程中处理在catch块中抛出的异常的最佳实践。(。网)【英文标题】:Bestpracticetohandleexception,thatisthrownwithincatchblock,inathread.(.NET)【发布时间】:2010-11-1218:12:08【问题描述】:您对处理线程执行中的异常有何看法?更具体地... 查看详情

Node.js 最佳实践异常处理——在 Async/Await 之后

】Node.js最佳实践异常处理——在Async/Await之后【英文标题】:Node.jsBestPracticeExceptionHandling-AfterAsync/Await【发布时间】:2017-01-3123:25:02【问题描述】:他们已经是关于这个话题的问题了Node.jsBestPracticeExceptionHandling这是旧的,答案非... 查看详情

java编程中关于异常处理的10个最佳实践

异常处理是书写 强健 Java应用的一个重要部分。它是关乎每个应用的一个非功能性需求,是为了优雅的处理任何错误状况,比如资源不可访问,非法输入,空输入等等。Java提供了几个异常处理特性,以try,catch和finally关键... 查看详情

java中处理异常的9个最佳实践

Java中处理异常的9个最佳实践Java中的异常处理不是一个简单的话题。初学者很难理解,甚至有经验的开发人员也会花几个小时来讨论应该如何抛出或处理这些异常。这就是为什么大多数开发团队都有自己的异常处理的规则和方法... 查看详情

go中的错误和异常处理最佳实践

本文已收录​​编程学习笔记​​。涵盖PHP、JavaScript、Linux、Golang、MySQL、Redis和开源工具等等相关内容。错误认识错误在Go中,错误是一种表示程序错误状态。包含了在程序在运行时、编译时的状态信息。一般我们在编写Go代码... 查看详情

自定义异常消息:最佳实践

】自定义异常消息:最佳实践【英文标题】:CustomExceptionMessages:Bestpractices【发布时间】:2010-10-1207:41:29【问题描述】:想知道在创建异常消息时我应该付出多少努力来强制提供有用的调试信息,还是应该只相信用户提供正确的... 查看详情

java处理exception的9个最佳实践,你做对了吗

在Java中处理异常并不是一个简单的事情。不仅仅初学者很难理解,即使一些有经验的开发者也需要花费很多时间来思考如何处理异常,包括需要处理哪些异常,怎样处理等等。这也是绝大多数开发团队都会制定一些... 查看详情

防止 Node.js PRODUCTION 服务器因未知且未处理的异常而崩溃的最佳实践

】防止Node.jsPRODUCTION服务器因未知且未处理的异常而崩溃的最佳实践【英文标题】:BestpracticestopreventNode.jsPRODUCTIONserver\'scrashduetoanunknownandun-handledexception【发布时间】:2015-12-3015:59:49【问题描述】:防止Node.jsPRODUCTION服务器因未知... 查看详情

java处理exception的9个最佳实践,你做对了吗(代码片段)

在Java中处理异常并不是一个简单的事情。不仅仅初学者很难理解,即使一些有经验的开发者也需要花费很多时间来思考如何处理异常,包括需要处理哪些异常,怎样处理等等。这也是绝大多数开发团队都会制定一些... 查看详情

关于java异常处理的20个最佳实践(代码片段)

在我们深入了解异常处理最佳实践的深层概念之前,让我们从一个最重要的概念开始,那就是理解在JAVA中有三种一般类型的可抛类: 检查性异常(checkedexceptions)、非检查性异常(uncheckedExceptions)和 错误(errors)。异常类型 ... 查看详情

捕获和重新抛出 .NET 异常的最佳实践

】捕获和重新抛出.NET异常的最佳实践【英文标题】:Bestpracticesforcatchingandre-throwing.NETexceptions【发布时间】:2010-09-0613:29:45【问题描述】:在捕获异常并重新抛出异常时要考虑哪些最佳做法?我想确保保留Exception对象的InnerExceptio... 查看详情

express开发与部署最佳实践--待续

链接 nginx代理缓存 压缩等 全部采用异步  使用trycatch 处理同步异常 promise处理异步异常, 而不是使用domains 或者 uncaughtException  查看详情

为 iphone 编写 API 时错误处理的最佳实践是啥?

...描述】:我们正在为iphone开发人员编写API,但我们不知道异常处理的最佳实践是什么。我们研究了NSError,标准POSIX方式,N 查看详情