Android检测程序崩溃框架CustomActivityOnCrash

在Android程序中,程序有时会遇到各种之前没有遇到的问题,这时如果能够对程序进行额外判断就好的,CustomActivityOnCrash框架就实现的这个功能。如果你的程序出现崩溃,它会检测到(各种崩溃,比如空指针),会弹出一个页面,提示你程序崩溃,你是否要关闭程序,还是重新启动程序!
效果:

错误报告,可以直接显示在页面上或吐司出来!
崩溃后显示的页面既可以是框架默认的,也可以是自己定义的。

原文章:https://github.com/Ereza/CustomActivityOnCrash
文章全是英文,而且是在Studio中运行,我的运行环境是IDEA!不能依赖,只能把文件复制进来,其实文件不多,就几个java文件!还有些资源文件!和一个jar包:support-annotations-26.0.0-alpha1.jar,框架中有一个注解类是V4包下没有,只能用上面那个包!

使用方法,我的和原作者的是一样的,但是我的讲解更详细,而且是中文!

步骤一

导入框架类和jar包(IDEA不能依赖,使用可以直接把那些文件加入到你的src文件加下就可以)
如图所示:

可以看到这个框架总共就四个java文件!
这个上面导入的jar包,可能会跟V4的冲突!在Studio中是完全没有问题的!
框架内也是有一个DefaultErrorActivity,要在AndroidManifest中注册!

步骤二

在继承Application的类中进行基本设置

package com.lwz.oncrash;import android.app.Application;
import android.util.Log;
import cat.ereza.customactivityoncrash.CustomActivityOnCrash;
import cat.ereza.customactivityoncrash.activity.DefaultErrorActivity;
import cat.ereza.customactivityoncrash.config.CaocConfig;/*** Application * 程序崩溃的基本设置,请看注解!*/public class App extends Application {private static final String TAG = "TAG";@Overridepublic void onCreate() {super.onCreate();//整个配置属性,可以设置一个或多个,也可以一个都不设置CaocConfig.Builder.create()//程序在后台时,发生崩溃的三种处理方式//BackgroundMode.BACKGROUND_MODE_SHOW_CUSTOM: //当应用程序处于后台时崩溃,也会启动错误页面,//BackgroundMode.BACKGROUND_MODE_CRASH:      //当应用程序处于后台崩溃时显示默认系统错误(一个系统提示的错误对话框),//BackgroundMode.BACKGROUND_MODE_SILENT:     //当应用程序处于后台时崩溃,默默地关闭程序!这种模式我感觉最好.backgroundMode(CaocConfig.BACKGROUND_MODE_SILENT).enabled(true)     //这阻止了对崩溃的拦截,false表示阻止。用它来禁用customactivityoncrash框架.showErrorDetails(false) //这将隐藏错误活动中的“错误详细信息”按钮,从而隐藏堆栈跟踪。.showRestartButton(false)    //是否可以重启页面.trackActivities(true)     //错误页面中显示错误详细信息.minTimeBetweenCrashesMs(2000)      //定义应用程序崩溃之间的最短时间,以确定我们不在崩溃循环中。比如:在规定的时间内再次崩溃,框架将不处理,让系统处理!.errorDrawable(R.drawable.ic_launcher)     //崩溃页面显示的图标.restartActivity(MainActivity.class)      //重新启动后的页面.errorActivity(DefaultErrorActivity.class) //程序崩溃后显示的页面.eventListener(new CustomEventListener())//设置监听.apply();//如果没有任何配置,程序崩溃显示的是默认的设置CustomActivityOnCrash.install(this);}/*** 监听程序崩溃/重启*/private static class CustomEventListener implements CustomActivityOnCrash.EventListener {//程序崩溃回调@Overridepublic void onLaunchErrorActivity() {Log.e(TAG, "onLaunchErrorActivity()");}//重启程序时回调@Overridepublic void onRestartAppFromErrorActivity() {Log.e(TAG, "onRestartAppFromErrorActivity()");}//在崩溃提示页面关闭程序时回调@Overridepublic void onCloseAppFromErrorActivity() {Log.e(TAG, "onCloseAppFromErrorActivity()");}}
}

上面很多语句都是可以不设置的,但是你至少要在onCreate中设置一句话:

 //如果没有任何配置,程序崩溃显示的是默认的设置CustomActivityOnCrash.install(this);

最后记得在AndroidManifest中注册下App!

做完前面两个,其实是已经可以实现程序崩溃后的简单处理。
但是框架崩溃页面只能选择关闭页面或重启程序的其中一种,并且要在config对象里面设置好。

 .showRestartButton(false)    //默认false,是否可以重启页面,

如果设置true,默认的程序崩溃页面只能选择重启程序,如果设置false,默认的程序崩溃页面只能选择关闭程序!

步骤三

如果你想自己设置,程序崩溃后显示的页面,也是可以的,并且可以同时显示关闭程序和重新启动程序
下面就是自定义的程序崩溃后的Activity


package com.lwz.oncrash;import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import cat.ereza.customactivityoncrash.CustomActivityOnCrash;
import cat.ereza.customactivityoncrash.config.CaocConfig;/*** 程序崩溃后显示的崩溃页面* 自定义的错误显示页面*/
public class CustomErrorActivity extends Activity implements View.OnClickListener {TextView errorDetailsText;//显示崩溃提示的文本Button btn_restart;//关闭页面的按钮Button btn_close;//关闭页面的按钮CaocConfig config;//配置对象@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_custom_error);initView();initData();initEvent();}private void initView() {errorDetailsText = (TextView) findViewById(R.id.error_details);btn_restart = (Button) findViewById(R.id.btn_restart);btn_close = (Button) findViewById(R.id.btn_close);}private void initData() {//可以获取到的四个信息:String stackString = CustomActivityOnCrash.getStackTraceFromIntent(getIntent());//将堆栈跟踪作为字符串获取。String logString = CustomActivityOnCrash.getActivityLogFromIntent(getIntent()); //获取错误报告的Log信息String allString = CustomActivityOnCrash.getAllErrorDetailsFromIntent(this, getIntent());// 获取所有的信息config = CustomActivityOnCrash.getConfigFromIntent(getIntent());//获得配置信息,比如设置的程序崩溃显示的页面和重新启动显示的页面等等信息errorDetailsText.setText("程序崩溃了!");//吐司Toast.makeText(this, stackString, Toast.LENGTH_SHORT).show();}private void initEvent() {btn_restart.setOnClickListener(this);btn_close.setOnClickListener(this);}public void onClick(View v) {if (config != null && config.getRestartActivityClass() != null) {//重启程序if (v.getId() == R.id.btn_restart) {CustomActivityOnCrash.restartApplication(CustomErrorActivity.this, config);}}if (config != null) {//关闭页面if (v.getId() == R.id.btn_close) {CustomActivityOnCrash.closeApplication(CustomErrorActivity.this, config);}}}
}

上面可以看到无论是程序关闭还是重启都是使用了CustomActivityOnCrash的静态方法,但是重启要判断是否设置了重新启动后显示的页面!

  .restartActivity(MainActivity.class)      //设置重新启动后的页面.errorActivity(DefaultErrorActivity.class) //设置程序崩溃后显示的页面

这里重启不一定要显示到程序的主界面,可以是程序的任意Activity!只是看你在config中是怎么设置的,
但是要注意,如果那个非主界面页面是从其他页面跳转过去的,并且还携带了不少数据,重启后页面是无法获取到数据的。

设置程序在后台崩溃后的处理情况

在上面演示动画中可以看到有一个5秒后程序崩溃的情况,就是为了测试,后台崩溃的处理情况

                 //程序在后台时,发生崩溃的三种处理方式//BackgroundMode.BACKGROUND_MODE_SHOW_CUSTOM: //当应用程序处于后台时崩溃,也会启动错误页面,//BackgroundMode.BACKGROUND_MODE_CRASH:      //当应用程序处于后台崩溃时显示默认系统错误(一个系统提示的错误对话框),//BackgroundMode.BACKGROUND_MODE_SILENT:     //当应用程序处于后台时崩溃,默默地关闭程序!这种模式我感觉最好.backgroundMode(CaocConfig.BACKGROUND_MODE_SILENT)

看上面解释应该是很清楚了吧!

1.依然显示崩溃页面:


.backgroundMode(CaocConfig.BACKGROUND_MODE_SHOW_CUSTOM)//即使退到后台,崩溃页面依然显示

效果:

2.显示的是系统的崩溃页面:


.backgroundMode(CaocConfig.BACKGROUND_MODE_CRASH)//即使退到后台,崩溃页面依然显示

效果:

3.不显示崩溃页面:

个人感觉这个设置比较好,程序蹦就蹦了,下次打开,就重新打开程序就好了!

.backgroundMode(CaocConfig.BACKGROUND_MODE_SILENT)//即使退到后台,崩溃页面依然显示

效果:

我的项目源码:https://github.com/liwenzhi/CustomActivityOnCrashDemo_Eclipse

共勉:生,活!

Android检测程序崩溃框架CustomActivityOnCrash相关推荐

  1. android+程序崩溃,Android平台程序崩溃的类型及原因列举

    Android平台程序崩溃大家都应该遇到过,force close和ANR应该是大家遇到较多的. 这里把Android平台程序崩溃的各种类型做一个简述和原因列举. 1.ANR(可见ANR): 发生场景 ...

  2. Android平台程序崩溃的类型及原因列举

    Android平台程序崩溃大家都应该遇到过,force close和ANR应该是大家遇到较多的. 这里把Android平台程序崩溃的各种类型做一个简述和原因列举. 1.ANR(可见ANR): 发生场景 ...

  3. android开发程序崩溃闪退问题

    android开发程序崩溃闪退问题 闪退原因 总结几个常见的app运行闪退原因: 1.数组访问越界. 2.访问未初始化的指针或者其他变量. 3.在主线程中执行耗时耗内存的操作. 下面重点说明一下第三种 ...

  4. Android应用程序崩溃:影响、原因和解决方案

    Android应用程序崩溃:影响.原因和解决方案 您是否曾经为诊断和修复移动应用程序崩溃而苦恼?这可能是一个非常耗时且令人沮丧的问题. 而且,开发人员交付人们喜爱的稳定可靠的移动应用程序的压力从未如此 ...

  5. android 动态生成tablelayout,动态tablelayout创建的android应用程序崩溃

    似乎我不是第一个动态创建TableLayOut的人.问题是,当我将TableRow对象添加到TableLayout时,我的android应用程序崩溃并完成了意外错误. 我想做的事? 我想用下一个项目布 ...

  6. 三星s7不能运行java_在调试模式下启动时Android应用程序崩溃

    当我在 debug 模式下运行时,应用程序崩溃了,但是当我正常运行它时它会起作用 . 我认为附加调试器时会出现问题 . 日志: A/art: art/runtime/jdwp/jdwp_event.c ...

  7. android 三星机型奔溃,Android应用程序崩溃在三星Galaxy S3(内存不足错误)

    我有一个 Android应用程序,需要一些照片,重新调整大小,并将它们发送到后端服务器.除三星Galaxy S3外,所有其他手机(姜饼和冰淇淋三明治)均可使用此应用程序.每当它拍照并尝试重新调整大小时 ...

  8. android拍照程序崩溃,android

    我是android开发的新手. 我们使用flutter开发我们的应用程序. 最近我们发现有一个错误. 当我们安装该应用程序后,并第一次拍照,该应用程序将崩溃. 这是日志 W/libEGL (14538 ...

  9. android程序崩溃后,在appuard混淆之后,Android应用程序崩溃了

    我在我的应用程序上运行了proguard工具来进行混淆.我知道,当混淆发生时,proguard会缩小并优化应用程序.因此,在混淆应用程序正确打开后,然后当我尝试登录时崩溃.我得到的最好的是这个日志,因 ...

最新文章

  1. sobol敏感性分析 matlab代码
  2. dubbo 使用 filter 报错解决
  3. 有梦想就有前进的动力
  4. php html asp .net iis tomcat,iis+apache+tomcat 整合共享80口 支持ASP .NET JSP PHP全能WEB服务...
  5. mysql表单查询_表单查询实例
  6. log4net 小记
  7. 2017.9.9 传送带 失败总结
  8. 计算机开题报告中的研究方法,开题报告:经济学写论文用到的五种研究方法
  9. java web 服务开发技术_Java web应用开发技术
  10. android夜间切换失败,android夜间模式切换
  11. 阿里云 mysql 命令_是mysql命令
  12. SitePoint Podcast#77:纸还是蓝光?
  13. python相对路径找不到文件_Python里使用相对路径的坑
  14. backtrack 4 in virtualBox 联网
  15. Solana初识\了解Solana:领导者轮换机制
  16. 蓝牙4.0、经典蓝牙、BT、BLE的关系与区别
  17. adaboost训练 之 强分类器训练原理
  18. VIM 编辑器使用教程
  19. 2058:【例3.10】简单计算器
  20. react中实现父传子 子传父 兄弟传值

热门文章

  1. 【安全牛学习笔记】CSRF跨站请求伪造攻击漏洞的原理及解决办法
  2. 网络入侵检测Python
  3. 实验十六:网络入侵检测系统(IDS)的安装部署
  4. 内存大厂威刚发布速度高达550MB/s的固态硬盘SU750
  5. 机4月升级鸿蒙,鸿蒙系统4月升级:一文教你看懂什么是鸿蒙系统?
  6. 数据库技巧:整理SQLServer非常实用的脚本
  7. centos 安装 sun java_CentOS卸载系统自带的OpenJDK并安装Sun的JDK的方法
  8. 桥梁在线监测系统详解
  9. 【UE4 第一人称射击游戏】11-武器跟随鼠标移动并添加开火音效
  10. C# 图书管理系统(MySQL)——属性设计(三)