美文网首页
闪退异常捕获

闪退异常捕获

作者: FrankDaddy | 来源:发表于2017-01-20 09:52 被阅读40次

这里主要是针对崩溃异常捕获(runtimeException)

思路就是整个程序都在自己写的application监控下,然后在application里面去监控异常的情况,以及在捕获异常的时候把当前机型和异常的情况提交给服务端。

直接上代码:


public class MyApplication extends Application {

    public static Context context;

    @Override

    public void onCreate() {

        super.onCreate();

        context = getApplicationContext();

        // 全局闪退异常记录

        CrashUtils crashUtils = CrashUtils.getInstance();

        crashUtils.init();

}

/** 获取全局上下文 **/

    public static Context getContext() {

        return context;

    }

}

帮助类:

/**

* Created by Frank on 2016/12/22.

* 崩溃相关工具类

*/

public class CrashUtils implements Thread.UncaughtExceptionHandler {

    private volatile static CrashUtils mInstance;

    privateThread.UncaughtExceptionHandler mHandler;

    private boolean mInitialized;

    privateCrashUtils() {

    }

    /**单例**/

    public static CrashUtils getInstance() {

        if(mInstance==null) {

            synchronized(CrashUtils.class) {

                if(mInstance==null) {

                    mInstance=new CrashUtils();

            }

        }

    }

    return mInstance;

}

    /*** 初始化{true: 成功;false: 失败}**/

    public boolean init() {

        if(mInitialized)return true;

        mHandler= Thread.getDefaultUncaughtExceptionHandler();

        Thread.setDefaultUncaughtExceptionHandler(this);

        return mInitialized=true;

    }

    @Override

    public void uncaughtException(Thread thread, finalThrowable throwable) {

        newThread(newRunnable() {

        @Override

        public void run() {

        CrashModel crashModel =new CrashModel();

        crashModel.setDateNow(new SimpleDateFormat("yy-MM-dd   HH:mm:ss",Locale.getDefault()).format(newDate()));

        crashModel.setDeviceManufacturer(Build.MANUFACTURER);

        crashModel.setDeviceModel(Build.MODEL);

        crashModel.setAndroidVersion(Build.VERSION.RELEASE);

        crashModel.setAndroidSDK(Build.VERSION.SDK_INT);

        crashModel.setMessage(throwable.getMessage());

        // 接下来就是调用服务端的接口去保存闪退的信息

        }

        }).start();

        if(mHandler!=null) {

            mHandler.uncaughtException(thread,throwable);

        }

    }

}

model类:

/**

* Created by Frank on 2016/12/23.

* 全局异常捕获

*/

public class CrashModel {

/*

************* Crash Log Head ****************

Device Manufacturer: Meizu

Device Model      : m3 note

Android Version    : 5.1

Android SDK        : 22

App VersionName    : null

App VersionCode    : 0

************* Crash Log Head ****************

*/

    privateStringDeviceManufacturer;

    privateStringDeviceModel;

    privateStringAndroidVersion;

    private intAndroidSDK;

    privateStringAppVersionName;

    private intAppVersionCode;

    privateStringMessage;

    privateStringDateNow;

    // get,set 方法

}

加入注册信息-->配置文件(AndroidManifest.xml)中
android:name=".MyApplication"
就加在<application 后面
记得给权限(获取数据,SD卡写入什么的)
小知识点源码

相关文章

网友评论

      本文标题:闪退异常捕获

      本文链接:https://www.haomeiwen.com/subject/pmewbttx.html