全局异常的获取

获取全局异常,自定义应用奔溃的友好提示界面,上传奔溃信息等

安卓提供UncaughtExceptionHandler可以用来捕获程序异常

自定义捕获全局异常

1,继承UncaughtExceptionHandler

2,设置当前对象为默认捕获异常对象

// 获取系统默认的UncaughtException处理器
defalutHandler = Thread.getDefaultUncaughtExceptionHandler();
// 设置该 当前对象 为程序的默认处理器
Thread.setDefaultUncaughtExceptionHandler(this);
3,对捕获的异常进行处理

    /**
     * 当UncaughtException发生时会转入该函数来处理
     * 异常在哪个线程发出,那么这个方法就在那个线程运行
     */
    @Override
    public void uncaughtException(Thread thread, Throwable ex)
    {
        formatter.format(new Date());
        //截获 异常信息
        //异常在哪个线程发出,那么这个方法就在那个线程运行
        //你可以。。跳转到新界面 提示应用奔溃
        //将 异常信息写入 log文件 上传服务器 等各种处理

    }
4,在application中注册 即可

具体代码:

异常捕获类

public class CrashHandler implements Thread.UncaughtExceptionHandler
{
    private static final String TAG = CrashHandler.class.getSimpleName();

    private static CrashHandler instance; // 单例模式

    private Context mContext; // 程序Context对象
    private Thread.UncaughtExceptionHandler defalutHandler; // 系统默认的UncaughtException处理类
    private DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss.SSS", Locale.CHINA);

    private CrashHandler(){
    }

    public static CrashHandler getInstance() {
        if(null == instance)
        {
            synchronized(CrashHandler.class)
            {
                if(null == instance)
                {
                    instance = new CrashHandler();
                }
            }
        }
        return instance;
    }

    public void bind(Context context){
        mContext = context;
        // 获取系统默认的UncaughtException处理器
        defalutHandler = Thread.getDefaultUncaughtExceptionHandler();
        // 设置该 当前对象 为程序的默认处理器
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

 <pre name="code" class="java">    /**
     * 当UncaughtException发生时会转入该函数来处理
     * 异常在哪个线程发出,那么这个方法就在那个线程运行
     */
    @Override
    public void uncaughtException(Thread thread, Throwable ex)
    {
        formatter.format(new Date());
        //截获 异常信息
        //异常在哪个线程发出,那么这个方法就在那个线程运行
        //你可以。。跳转到新界面 提示应用奔溃
        //将 异常信息写入 log文件 上传服务器 等各种处理
        
        //退出应用
        //android.os.Process.killProcess(android.os.Process.myPid());
        System.exit(0);
    }

 

application中注册

   @Override
    public void onCreate() {
        super.onCreate();
        CrashHandler.getInstance().bind(this);
    }


使用UncaughtExceptionHandler重启线程

Android处理崩溃的一些实践



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值