资讯专栏INFORMATION COLUMN

提升应用崩溃时的用户体验——去掉烦人的“很抱歉”提示框

bladefury / 2904人阅读

摘要:相信很多在用或者用过系统的的手机的朋友都有过这样的经历自己玩着玩着某个程序,突然屏幕一黑,然后出现一个对话框,提示很抱歉,应用程序已经停止工作。到此,我们的程序在发生崩溃的时候就不会出现很抱歉。。。

相信很多在用或者用过Android系统的的手机的朋友都有过这样的经历:自己玩着玩着某个程序,突然屏幕一黑,然后出现一个对话框,提示很抱歉,应用程序已经停止工作。这意味着程序已然崩溃了,用户唯一要做的就是接下来重新运行这个程序,或者去干些别的。我个人推测,前者占大多数。
当然,一些比较健壮的程序是一般不会出现这种情况的,但是,作为一名对用户负责的开发者,要时刻为用户着想,这就是我们今天要谈的话题——优化程序崩溃时的用户体验。
我们的目标是:程序发生了异常后,自定义异常处理流程,然后自动重新启动程序。
看上去貌似很复杂,其实很容易。核心在于对Application这个单例的继承。
首先,在应用中写一个类,继承Application,然后在AndroidManifest.xml中注册,注册的代码可如下例:


    ......

其中,我把继承了Application的类是【包名】.environment.BaseApplication。
大家可以根据自身的项目需要进行安排,不要忘了在这里注册就好。
之后就是对应用中未捕获的异常做处理了。
在BaseApplication中,创建一个名为CrashHandler的子类,该类实现UncaughtExceptionHandler接口,复写uncaughtException方法。在该方法中,进行相应的崩溃处理。这里我们需要重启程序,因此,该子类可以写成如下代码段所示的内容:

// 异常处理
class CrashHandler implements UncaughtExceptionHandler {

    @Override
    public void uncaughtException(Thread thread, final Throwable ex) {
        ex.printStackTrace();
        Intent restartIntent = new Intent(BaseApplication.this, SplashScreen.class);
        restartIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(restartIntent);
        android.os.Process.killProcess(android.os.Process.myPid());
    }
}

这里需要注意的是,Intent对象的Flag必须包含FLAG_ACTIVITY_NEW_TASK。
最后,在复写的onCreate方法中,指定异常处理的方法:

Thread.setDefaultUncaughtExceptionHandler(crashHandler);

其中,crashHandler为CrashHandler的对象。
到此,我们的程序在发生崩溃的时候就不会出现“很抱歉。。。”的对话框了,取而代之的是自动重启。
当然,这只是一个治标不治本的方法,真正的解决之道依然要找到崩溃的位置,然后除掉这个Bug。
最后,关于Application,我这里就不多说了,如果诸位不是很了解的话,可以看下这位兄弟的文章,会大有启发:
http://blog.csdn.net/pi9nc/article/details/11200969

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/2513.html

相关文章

  • 一个脚本教你快速去除桌面图标烦人小箭头

    摘要:于是乎,冰河写了一个脚本完美去除了桌面图标烦人的小箭头。今天,给大家分享一个如何完美去除桌面快捷图标小箭头的技巧,希望能够给大家带来帮助。这种方法不会导致任何问题可放心使用,冰河已经亲自测试过了。 ...

    Jaden 评论0 收藏0
  • 社交系统 ThinkSNS+ V2.1.1 更新播报

    摘要:感谢大家一致对团队和产品的支持,我们在路上。拥有多个功能模块,全方位覆盖系统所需,微博朋友圈即时聊天直播论坛资讯活动频道圈子问答打赏等主流社交功能应有尽有。价格梯度多样,根据您的项目需求灵活选型运用,支持深度灵活二次开发。 研发发布版本号: V2.1.1 更新发布时间:2018年11月9日 发布类型:功能优化、BUG修复 ThinkSNS+最新体验demo:请于官网下载/安装最新版或点...

    zr_hebo 评论0 收藏0
  • 如何优雅处理前端异常?

    摘要:二需要处理哪些异常对于前端来说,我们可做的异常捕获还真不少。总结一下,大概如下语法错误代码异常请求异常静态资源加载异常异常异常跨域崩溃和卡顿下面我会针对每种具体情况来说明如何处理这些异常。 前端一直是距离用户最近的一层,随着产品的日益完善,我们会更加注重用户体验,而前端异常却如鲠在喉,甚是烦人。一、为什么要处理异常?异常是不可控的,会影响最终的呈现结果,但是我们有充分的理由去做这样的事...

    zoomdong 评论0 收藏0
  • 如何优雅处理前端异常?

    摘要:二需要处理哪些异常对于前端来说,我们可做的异常捕获还真不少。总结一下,大概如下语法错误代码异常请求异常静态资源加载异常异常异常跨域崩溃和卡顿下面我会针对每种具体情况来说明如何处理这些异常。 前端一直是距离用户最近的一层,随着产品的日益完善,我们会更加注重用户体验,而前端异常却如鲠在喉,甚是烦人。一、为什么要处理异常?异常是不可控的,会影响最终的呈现结果,但是我们有充分的理由去做这样的事...

    xiongzenghui 评论0 收藏0
  • Fullscreen API 全屏显示网页

    摘要:进入全屏将全屏显示。内核浏览器和表现不同,前者只要求是元素即可,后者则要求必须是文档流中的元素,比较严格,否则不能全屏显示。内核浏览器会阻止除方向键控制键之外的键盘输入,会在输入时发出要求用户退出全屏状态的提示。 第一次看到应用 Fullscreen API 全屏显示网页,是 FaceBook 中的照片放大。作为一个比较新的 API,目前只有 Safari、Chrome 和 FireF...

    TNFE 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<