国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android CrashHandler編寫(xiě)自己的異常捕獲的方法

2019-12-12 01:30:16
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

平時(shí)寫(xiě)代碼,我們可能會(huì)拋出各種異常,這些異常有些是我們測(cè)試過(guò)程中發(fā)現(xiàn)進(jìn)行解決的,但是也有一些異常是我們未知的,不論是代碼的邏輯問(wèn)題還是Android本身底層的一些bug,我們都需要及時(shí)了解并進(jìn)行解決。當(dāng)用戶(hù)在使用app出現(xiàn)崩潰現(xiàn)象時(shí)我們需要知道是什么原因,并將原因記錄下來(lái)上到服務(wù)器,這樣以后我們就可以知道具體是什么原因了 

CrashHandler類(lèi)

用于記錄crash原因保存到sd卡中。

public class CrashHandler implements Thread.UncaughtExceptionHandler {  private static final String TAG = "CrashHandler";  private static final boolean DEBUG = true;  //文件路徑  private static final String PATH = Environment.getExternalStorageDirectory().getPath() +File.separator+ "crash";  private static final String FILE_NAME = "crash";  private static final String FILE_NAME_SUFEIX = ".trace";  private static Thread.UncaughtExceptionHandler mDefaultCrashHandler;  private static CrashHandler mCrashHandler = new CrashHandler();  private Context mContext;  private CrashHandler() {  }  public static CrashHandler getInstance() {    return mCrashHandler;  }  public void init(Context context) {    mDefaultCrashHandler = Thread.getDefaultUncaughtExceptionHandler();    Thread.setDefaultUncaughtExceptionHandler(this);    mContext = context.getApplicationContext();  }  @Override  public void uncaughtException(Thread thread, Throwable ex) {    try {      //將文件寫(xiě)入sd卡      writeToSDcard(ex);      //寫(xiě)入后在這里可以進(jìn)行上傳操作    } catch (IOException e) {      e.printStackTrace();    } catch (PackageManager.NameNotFoundException e) {      e.printStackTrace();    }    ex.printStackTrace();    //如果系統(tǒng)提供了默認(rèn)異常處理就交給系統(tǒng)進(jìn)行處理,否則自己進(jìn)行處理。    if (mDefaultCrashHandler != null) {      mDefaultCrashHandler.uncaughtException(thread, ex);    } else {      Process.killProcess(Process.myPid());    }  }  //將異常寫(xiě)入文件  private void writeToSDcard(Throwable ex) throws IOException, PackageManager.NameNotFoundException {    //如果沒(méi)有SD卡,直接返回    if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {      return;    }    File filedir = new File(PATH);    if (!filedir.exists()) {      filedir.mkdirs();    }    long currenttime = System.currentTimeMillis();    String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(currenttime));    File exfile = new File(PATH +File.separator+FILE_NAME+time + FILE_NAME_SUFEIX);    PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(exfile)));    Log.e("錯(cuò)誤日志文件路徑",""+exfile.getAbsolutePath());    pw.println(time);    PackageManager pm = mContext.getPackageManager();    PackageInfo pi = pm.getPackageInfo(mContext.getPackageName(), PackageManager.GET_ACTIVITIES);    //當(dāng)前版本號(hào)    pw.println("App Version:" + pi.versionName + "_" + pi.versionCode);    //當(dāng)前系統(tǒng)    pw.println("OS version:" + Build.VERSION.RELEASE + "_" + Build.VERSION.SDK_INT);    //制造商    pw.println("Vendor:" + Build.MANUFACTURER);    //手機(jī)型號(hào)    pw.println("Model:" + Build.MODEL);    //CPU架構(gòu)    pw.println("CPU ABI:" + Build.CPU_ABI);    ex.printStackTrace(pw);    pw.close();  }}

調(diào)用

public class BaseApplication extends Application {  @Override  public void onCreate() {    super.onCreate();    CrashHandler crashHandler=CrashHandler.getInstance();    crashHandler.init(this);  }}

測(cè)試

 mButton.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View view) {        throw new RuntimeException("拋出一個(gè)異常");      }    });

最后記得添加文件權(quán)限,并調(diào)用BaseApplication

這里寫(xiě)圖片描述 

這里寫(xiě)圖片描述

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 陇西县| 邢台市| 鄂尔多斯市| 临洮县| 封开县| 平罗县| 环江| 伊通| 图们市| 志丹县| 广南县| 嘉鱼县| 同江市| 和平县| 蕲春县| 昔阳县| 白山市| 屯昌县| 靖安县| 将乐县| 洪湖市| 乌审旗| 峨边| 香格里拉县| 大荔县| 呼伦贝尔市| 宣化县| 志丹县| 绥化市| 进贤县| 长武县| 磴口县| 郸城县| 关岭| 政和县| 卢龙县| 宜都市| 新乡县| 安化县| 舒城县| 怀集县|