翻译自github项目CrashCustomActivity 感谢作者做出的贡献,我仅仅翻译,有小幅度的修改,不明白或者感觉欠妥的同志欢迎留言,谢谢大家。
这个项目是用来在应用发生异常的时候可以弹出一个自定义的Activity而不是一个“很抱歉,应用出现了未知的错误”对话框
添加如下的依赖库到你的项目中的build.gradle文件中去
dependencies {
compile ‘cat.ereza:customactivityoncrash:1.3.0‘
}
当然你也可以手动的去做这些事情,首先下载源代码,然后把library
文件当做库模块文件导入你的项目,并且添加依赖。
首先,重写Application,并且保证已经AndroidManifest中配置的Application类已经替换成了自己定义的Application类。
在Application的onCreate方法中进行如下操作
@Override
public void onCreate() {
super.onCreate();
//Install CustomActivityOnCrash
CustomActivityOnCrash.install(this);
//Now initialize your error handlers as normal
//i.e., ACRA.init(this);
//or Crashlytics.start(this);
}
注意:如果你的项目中已经有了ACRA,崩溃分析工具或者其他的相似工具,他依然可以正常的使用。但是CunstomActivityCrash必须首先被初始化,否则将导致其他的工具无法使用。
可以直接通过以下代码让你的应用程序崩溃
//当然了 这样写你的程序很可能会报错
//就不多解释了 看一下提示就可以解决了
throw new RuntimeException("Boom");
运行程序后,将会弹出一个错误提示的Activity而不是一个系统的对话框
你可以在任何时候调用下面的这些方法去定义出现异常时候的动作,当然了,一般情况下我们会在install(this)
方法之前去调用他
CustomActivityOnCrash.setLaunchErrorActivityWhenInBackground(boolean);
上面这个方法是定义当你的应用在后台运行的时候出现错误是否也出现这样的错误警告界面。但是如果在API<14的情况下,我们无法确定应用是否在后台还是前台,那么他将一直默认为true,也就是说会一直弹出错误提示。如果我们要是设置为false,那么在后台的应用出现错误将不会有错误警告界面,也不会有系统的错误对话框。这个方法默认是true,也就是显示。
CustomActivityOnCrash.setShowErrorDetails(boolean);
这个方法用来定义错误警告页面是否出现一个按钮去显示错误的详细信息,设置为true将会有这样的按钮,选择false,不会出现。默认是true。
CustomActivityOnCrash.setEnableAppRestart(boolean);
这个方法去定义错误警告界面必须存在一个重启APP的按钮或者关闭APP的按钮,设置为true将会显示重启APP的按钮,否则显示关闭APP的按钮。默认是true。
注意:如果指定重启APP的类或者指定的类没有找到,那么将会强制关闭APP。
CustomActivityOnCrash.setRestartActivityClass(Class<? extends Activity>);
这个方法去设置用户点击了重启应用的按钮后打开的Activity,如果你没有调用这个方法,那么CustomerActivityOnCrash将会在AndroidManifest.xml文件中去查找第一个过滤器(intent-fifter)中带有”cat.ereza.customactivityoncrash.RESTART”动作(action)的Activity去启动它。如果没有找他符合条件的Activity,那么重启APP的按钮将变成关闭APP的按钮,即使你设置了重启APP的按钮出现。
<intent-filter>
<!-- ... -->
<action android:name="cat.ereza.customactivityoncrash.RESTART" />
</intent-filter>
CustomActivityOnCrash.setErrorActivityClass(Class<? extends Activity>);
这个方法让我们去定义错误界面的出现的Activity,而不是现在默认的那个。如果你没设置或者设置为null,那么CustomActivityOnCrash将会在Manifest.xml文件中查找过滤器(intent-filfter)中带有”cat.ereza.customactivityoncrash.ERROR”动作(action)的Activity,如果不存在符合条件的activity,那么将使用默认的activity。如果你使用了自定义的activity,那么你必须在AndroidManifest.xml文件去声明activity的process属性为”:error_activity”
例子:
<activity
android:name="cat.ereza.sample.customactivityoncrash.activity.CustomErrorActivity"
android:label="@string/error_title"
android:process=":error_activity" />
说明,你可以在你的自定义的错去界面中去使用这样的过滤器(intent-filfter)
<intent-filter>
<!-- ... -->
<action android:name="cat.ereza.customactivityoncrash.ERROR" />
</intent-filter>
未完。。。待续
原文地址:http://blog.csdn.net/u013224148/article/details/47384199