Android自定义捕获Application全局异常-阿里云开发者社区

开发者社区> 一叶飘舟> 正文

Android自定义捕获Application全局异常

简介:
+关注继续查看

Android中如果应用出现异常,程序不做处理的话,通常会弹出“强行关闭”对话框,如下:

image

为了给用户更好的体验不需要抛出该对话框,需要对异常进行处理,写了一个例子,处理方式是捕获全局异常。工程目录如下:

image

其中CustomApplication是自定义的Application,用来注册全局异常,CustomException用来对异常进行处理,MainActivity中模拟了一个异常。首先看一下CustomApplication代码:

public class CustomApplication extends Application {

@Override
public void onCreate() {

super.onCreate();

CustomException customException = CustomException.getInstance();

customException.init(getApplicationContext());
}
}

继承了Application,同时将CustomException注册到CustomApplication中。

CustomException实现了UncaughtExceptionHandler ,主要代码如下:

public class CustomException implements UncaughtExceptionHandler {

//获取application 对象;
private Context mContext;

private Thread.UncaughtExceptionHandler defaultExceptionHandler;
//单例声明CustomException;
private static CustomException customException;

private CustomException(){
}

public static CustomException getInstance(){
if(customException == null){
customException = new CustomException();
}
return customException;
}

@Override
public void uncaughtException(Thread thread, Throwable exception) {
// TODO Auto-generated method stub
if(defaultExceptionHandler != null){

Log.e("tag", "exception >>>>>>>"+exception.getLocalizedMessage());
//将异常抛出,则应用会弹出异常对话框.这里先注释掉
// defaultExceptionHandler.uncaughtException(thread, exception);

}
}

public void init(Context context) {
mContext = context;
defaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(this);

}

}

其中

public void uncaughtException(Thread thread, Throwable exception) {
// TODO Auto-generated method stub
if(defaultExceptionHandler != null){

Log.e("tag", "exception >>>>>>>"+exception.getLocalizedMessage());
//将异常抛出,则应用会弹出异常对话框.这里先注释掉
// defaultExceptionHandler.uncaughtException(thread, exception);

}
}

对异常作出处理。然后在Mainfest中添加CustomApplication,如下:

<application android:icon="@drawable/icon" android:label="@string/app_name"
android:name="CustomApplication">

最后,在MainActivity中抛出异常,代码如下:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//模拟异常
throw new RuntimeException("my exception error");
}

程序运行日志结果如下:

image

源代码见:http://bigcateasymorse.googlecode.com/svn/trunk/android_exception_demo/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android Exception(全局异常)
Android 中全局未捕获的异常获取,首先继承UncaughtExceptionHandler,并实现其uncaughtException(Thread thread, Throwable throwable)方法,在此方法中可以打印出具体的错误。
693 0
uni-app自定义组件模式开发注意事项
uni-app 自 1.8版本开始,新增支持自定义组件模式,该编译模式组件性能更高,支持更多的Vue语法。 请开发者尽快升级老版项目为自定义组件模式,老版的模板编译模式将不再维护。 Tips: uni-app 不同编译模式差异,参考:https://ask.
8755 0
hibernate自定义校验Valid
步骤: 1.定义注解: import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.
988 0
第二十六章:自定义布局(五)
内视过程中本章到目前为止提供的大部分信息都是从包含派生自各种元素(如StackLayout,ScrollView和Label)的类的测试程序汇编而来,覆盖虚拟方法(如GetSizeRequest,OnSizeRequest,OnSizeAllocated和LayoutChildren) ,并使用System.Diagnostics命名空间中的Debug.WriteLine方法在Visual Studio或Xamarin Studio的“输出”窗口中显示信息。
606 0
[JSP]自定义标签库taglib
自定义标签的步骤 自定义标签的步骤大概有三步: 1.继承javax.servlet.jsp.tagext.*下提供的几个标签类,如Tag、TagSupport、BodyTagSupport、SimpleTagSupport(JSP2.0)。
734 0
uni-app自定义返回逻辑教程
自 HBuilderX v1.1.0 起,uni-app 的页面新增 onBackPress(event) 生命周期函数。 onBackPress(event) 返回 event ={form: backbutton | navigateBack} 说明 当用户进行以下操作时,会触发该函数: A...
6167 0
org.hibernate.hql.ast.QuerySyntaxException is not mapped异常
解决方案: 这一般是HQL语句错误 因为Hibernate是对类查询的 ,而不是对数据库表进行查询,from是实体类而不是表名! 例如: String hql = “from Employee e where e.
674 0
+关注
1635
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载