系統(tǒng)異常捕獲存儲(chǔ)上傳功能實(shí)現(xiàn)

UncaughtExceptionHandler是全局捕獲異常的,為app意外中止的提供一些處理的方法。只需要實(shí)現(xiàn)UncaughtExceptionHandler,重寫一些方法,就可以做到把異常信息保存在本地或者上傳到服務(wù)器。

https://blog.csdn.net/qdjdeveloper/article/details/78130226

1、定義java類實(shí)現(xiàn)系統(tǒng)接口UncaughtExceptionHandler,具體代碼如下:


import android.content.Context;

import android.content.pm.PackageInfo;

import android.content.pm.PackageManager;

import android.os.Build;

import android.os.Environment;

import android.os.SystemClock;

import com.blankj.utilcode.util.TimeUtils;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.io.PrintWriter;

import java.util.Date;

/**

* Created by wyn on 2018/9/29.

*/

public class CrashHandler implements Thread.UncaughtExceptionHandler {

//文件夾目錄

? ? private static final StringPATH = Environment.getExternalStorageDirectory().getPath() +"/projectName/crash_log/";

//文件名

? ? private static final StringFILE_NAME ="crash";

//文件名后綴

? ? private static final StringFILE_NAME_SUFFIX =".txt";

//上下文

? ? private ContextmContext;

private static class CrashHandlerInstance {

private static final CrashHandlerINSTANCE =new CrashHandler();

}

private CrashHandler() {

}

public static CrashHandler getInstance() {

return CrashHandlerInstance.INSTANCE;

}

@Override

? ? public void uncaughtException(Thread t, Throwable e) {

//導(dǎo)出異常信息到SD卡

? ? ? ? dumpExceptionToSDCard(e);

//上傳異常信息到服務(wù)器

? ? ? ? uploadExceptionToServer(e);

//延時(shí)1秒殺死進(jìn)程

? ? ? ? SystemClock.sleep(2000);

android.os.Process.killProcess(android.os.Process.myPid());

}

public void init(Context context) {

//將當(dāng)前實(shí)例設(shè)為系統(tǒng)默認(rèn)的異常處理器

? ? ? ? Thread.setDefaultUncaughtExceptionHandler(this);

//獲取Context,方便內(nèi)部使用

? ? ? ? mContext = context.getApplicationContext();

}

/**

* 導(dǎo)出異常信息到SD卡

*

? ? * @param ex

? ? */

? ? private void dumpExceptionToSDCard(Throwable ex) {

if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

return;

}

//創(chuàng)建文件夾

? ? ? ? File dir =new File(PATH);

if (!dir.exists()) {

dir.mkdirs();

}

String time = TimeUtils.date2String(new Date());

//以當(dāng)前時(shí)間創(chuàng)建log文件

? ? ? ? File file =new File(PATH +FILE_NAME + time +FILE_NAME_SUFFIX);

try {

//輸出流操作

? ? ? ? ? ? PrintWriter pw =new PrintWriter(new BufferedWriter(new FileWriter(file)));

//導(dǎo)出手機(jī)信息和異常信息

? ? ? ? ? ? PackageManager pm =mContext.getPackageManager();

PackageInfo pi = pm.getPackageInfo(mContext.getPackageName(), PackageManager.GET_ACTIVITIES);

pw.println("發(fā)生異常時(shí)間:" + time);

pw.println("應(yīng)用版本:" + pi.versionName);

pw.println("應(yīng)用版本號(hào):" + pi.versionCode);

pw.println("android版本號(hào):" + Build.VERSION.RELEASE);

pw.println("android版本號(hào)API:" + Build.VERSION.SDK_INT);

pw.println("手機(jī)制造商:" + Build.MANUFACTURER);

pw.println("手機(jī)型號(hào):" + Build.MODEL);

ex.printStackTrace(pw);

//關(guān)閉輸出流

? ? ? ? ? ? pw.close();

}catch (Exception e) {

}

}

/**

* 上傳異常信息到服務(wù)器

*

? ? * @param ex

? ? */

? ? private void uploadExceptionToServer(Throwable ex) {

// TODO: 添加異常上傳服務(wù)器

? ? }

}

2、在application對(duì)CrashHandler 初始化,在oncreate方法中。

CrashHandler.getInstance().init(this);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 廢話不多說(shuō),自己進(jìn)入今天的主題 1、面向?qū)ο蟮奶卣饔心男┓矫妫?答:面向?qū)ο蟮奶卣髦饕幸韵聨讉€(gè)方面: - 抽象:...
    傳奇內(nèi)服號(hào)閱讀 2,538評(píng)論 1 31
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,853評(píng)論 18 399
  • 前提 昨天寫了捕獲錯(cuò)誤日志的文章,但是沒有寫上傳到服務(wù)器的部分,今天就針對(duì)上傳服務(wù)器的部分進(jìn)行編寫和分析,如果沒有...
    Silence瀟湘夜雨閱讀 939評(píng)論 0 0
  • 前提 今天在群里聊天的時(shí)候有群友問如何捕獲錯(cuò)誤日志,我說(shuō)可以自己寫,也可以用第三方的比如騰訊的bugly,友盟的錯(cuò)...
    Silence瀟湘夜雨閱讀 1,878評(píng)論 2 12
  • 版本一 今天是情人節(jié),她鼓足勇氣對(duì)他告白。 她對(duì)他說(shuō):“我喜歡你很久了,和我在一起吧?!?他痞痞的笑著說(shuō):“我怎么...
    李木只閱讀 589評(píng)論 0 0

友情鏈接更多精彩內(nèi)容