android异常处理

编写应用时,总会有没有捕获到的异常,android应用崩溃时,默认情况下会弹出一个dialog,对于用户来说是一个很不友好的提示,那么如何捕获全局异常,然后自己来处理这个异常呢?

step1:

package com.bsi.crashdemo;

import android.app.ActivityManager;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Binder;
import android.os.Build;
import android.os.Process;
import android.widget.Toast;

/**
 * Created by QianMang 2017/7/26.
 */

public class CrashHandler implements Thread.UncaughtExceptionHandler {

    private Context context;
    private Thread.UncaughtExceptionHandler defaultHandler;

    private CrashHandler(){}

    //单例
    private static class CrashHandlerHolder{
        private static CrashHandler crashHandler = new CrashHandler();
    }

    public static CrashHandler getInstances(){
        return CrashHandlerHolder.crashHandler;
    }

    public void init(Context context){
        this.context = context;
        defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

    @Override
    public void uncaughtException(Thread thread, Throwable throwable) {
        if(!handlerException(throwable)){
            //未处理 调用系统默认的处理器处理
            defaultHandler.uncaughtException(thread,throwable);//调用此方法应用崩溃时会弹出dialog
        }else{
            //已经人为处理
            Toast.makeText(context,"已经人为处理",Toast.LENGTH_SHORT).show();
            Process.killProcess(Process.myPid());
            System.exit(1);
        }
    }

/**
 *返回ture表示处理异常,返回false时表示没处理异常
 *
 */
    private boolean handlerException(Throwable e){
        if(null == e){
            return false;
        }
        //收集异常信息 如手机型号 系统版本
        collectionException();
        saveException();

        return  true;
    }



    private void collectionException() {
        //code....自行编写
    }

    private void saveException() {
        //...code...自行编写
    }

}

用法:
自定义一个MyApplication继承Application,别忘了在Manifest中配置Application标签的name属性

package com.bsi.hellojni;

import android.app.Application;

/**
 * Created by QianMaing on 2017/7/26.
 */

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        CrashHandler.getInstances().init(getApplicationContext());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楚蕊博南谭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值