Android捕获全局异常
2015-11-03 16:02
429 查看
Android捕获全局异常
程序避免不了出现bug,导致程序崩溃,为了尽量不影响用户体验,可以全局捕获异常
效果图
异常捕获处理前异常捕获处理后(将程序重新启动)
捕获异常的工具类
package com.example.kongqw.exceptiondemo; import android.content.Context; import android.support.v7.internal.app.ToolbarActionBar; import android.util.Log; import android.widget.Toast; /** * Created by kongqw on 2015/11/3. */ public class KqwException implements Thread.UncaughtExceptionHandler { private static KqwException myCrashHandler; private Context mContext; private KqwException(Context context) { mContext = context; } public static synchronized KqwException getInstance(Context context) { if (null == myCrashHandler) { myCrashHandler = new KqwException(context); } return myCrashHandler; } public void uncaughtException(Thread thread, Throwable throwable) { long threadId = thread.getId(); String message = throwable.getMessage(); String localizedMessage = throwable.getLocalizedMessage(); Log.i("KqwException", "------------------------------------------------------"); Log.i("KqwException", "threadId = " + threadId); Log.i("KqwException", "message = " + message); Log.i("KqwException", "localizedMessage = " + localizedMessage); Log.i("KqwException", "------------------------------------------------------"); throwable.printStackTrace(); Log.i("KqwException", "------------------------------------------------------"); // TODO 下面捕获到异常以后要做的事情,可以重启应用,获取手机信息上传到服务器等 Log.i("KqwException", "------------------应用被重启----------------"); // 重启应用 mContext.startActivity(mContext.getPackageManager().getLaunchIntentForPackage(mContext.getPackageName())); //干掉当前的程序 android.os.Process.killProcess(android.os.Process.myPid()); } }
使用
在Application下添加Handler
注册Application
在清单文件下添加name属性
<application …… android:name=".InitApplication" …… > <activity …… > <intent-filter> …… </intent-filter> </activity> </application>
Application
package com.example.kongqw.exceptiondemo; import android.app.Application; /** * Created by kongqw on 2015/11/3. */ public class InitApplication extends Application { @Override public void onCreate() { super.onCreate(); KqwException handler = KqwException.getInstance(this); Thread.setDefaultUncaughtExceptionHandler(handler); } }
测试类
package com.example.kongqw.exceptiondemo; import android.app.Activity; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void bug(View view) { Toast.makeText(this, "程序崩溃", Toast.LENGTH_SHORT).show(); // 除数为0 导致程序崩溃 int a = 1 / 0; } }
XML布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context=".MainActivity" tools:showIn="@layout/activity_main"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="bug" android:text="点击程序崩溃" /> </RelativeLayout>
相关文章推荐
- Android编程实现3D滑动旋转效果的方法
- 动态添加布局(个人觉得还算不错,查了很多资料,网上没有我要的,所以写出来)
- 我的记事本项目之路(三)
- Android 联系人A-Z列表布局实现分析。
- 刷新头的升级版,仿QQ的红色消息小球
- Activity隐式显示调用
- 自定义ANDROID中EDITTEXT中的HINT文本的大小
- android 扫描手机上的图片 获取手机图片路径
- android Fragment 懒加载布局
- Android 通讯 —— EventBus
- 【FastDev4Android框架开发】消息总线EventBus的基本使用(二十)
- 新建android项目,找不到样式“textViewStyle”,无法生成R.java文件
- 我的记事本项目之路(二)
- Android 图片滚动,加入自动播放功能,使用自定义属性实现,霸气十足!
- Android Studio ABD not responding 问题
- Android Studio系列教程六--Gradle多渠道打包
- Android Studio系列教程五--Gradle命令详解与导入第三方包
- android对话框的EditText点击后不显示输入法的问题
- android SQLite使用SQLiteOpenHelper类对数据库进行增删查改
- Android Studio系列教程四--Gradle基础