플래시백 예외 캡처

3084 단어
이것은 주로 충돌 예외 캡처(runtimeException)를 위한 것입니다.
자체적으로 작성한 애플리케이션을 전체 프로그램이 모니터링한 후 애플리케이션에서 비정상적인 상황을 모니터링하고 예외가 발생하면 현재 모델과 비정상적인 상황을 서버에 제출한다는 개념이다.
코드로 직접 이동:

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);

        }

    }

}

모델 클래스:
/**

* 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"을 추가하고 권한 부여(데이터 가져오기, SD 카드 쓰기 등)를 기억하십시오. 작은 지식 포인트 소스 코드

좋은 웹페이지 즐겨찾기