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

首頁 > 系統 > Android > 正文

Android CrashHandler編寫自己的異常捕獲的方法

2019-10-22 18:20:44
字體:
來源:轉載
供稿:網友

平時寫代碼,我們可能會拋出各種異常,這些異常有些是我們測試過程中發現進行解決的,但是也有一些異常是我們未知的,不論是代碼的邏輯問題還是android/289624.html">Android本身底層的一些bug,我們都需要及時了解并進行解決。當用戶在使用app出現崩潰現象時我們需要知道是什么原因,并將原因記錄下來上到服務器,這樣以后我們就可以知道具體是什么原因了 

CrashHandler類

用于記錄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 {      //將文件寫入sd卡      writeToSDcard(ex);      //寫入后在這里可以進行上傳操作    } catch (IOException e) {      e.printStackTrace();    } catch (PackageManager.NameNotFoundException e) {      e.printStackTrace();    }    ex.printStackTrace();    //如果系統提供了默認異常處理就交給系統進行處理,否則自己進行處理。    if (mDefaultCrashHandler != null) {      mDefaultCrashHandler.uncaughtException(thread, ex);    } else {      Process.killProcess(Process.myPid());    }  }  //將異常寫入文件  private void writeToSDcard(Throwable ex) throws IOException, PackageManager.NameNotFoundException {    //如果沒有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("錯誤日志文件路徑",""+exfile.getAbsolutePath());    pw.println(time);    PackageManager pm = mContext.getPackageManager();    PackageInfo pi = pm.getPackageInfo(mContext.getPackageName(), PackageManager.GET_ACTIVITIES);    //當前版本號    pw.println("App Version:" + pi.versionName + "_" + pi.versionCode);    //當前系統    pw.println("OS version:" + Build.VERSION.RELEASE + "_" + Build.VERSION.SDK_INT);    //制造商    pw.println("Vendor:" + Build.MANUFACTURER);    //手機型號    pw.println("Model:" + Build.MODEL);    //CPU架構    pw.println("CPU ABI:" + Build.CPU_ABI);    ex.printStackTrace(pw);    pw.close();  }}

調用

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

測試

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

最后記得添加文件權限,并調用BaseApplication

Android,CrashHandler,異常捕獲

Android,CrashHandler,異常捕獲

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凤翔县| 新乐市| 郎溪县| 增城市| 乌兰浩特市| 韶山市| 武平县| 威宁| 无棣县| 四平市| 衡山县| 浏阳市| 巧家县| 喜德县| 青龙| 百色市| 江都市| 东乡族自治县| 泰安市| 玉龙| 苏尼特左旗| 法库县| 大冶市| 宜宾县| 即墨市| 汶川县| 阿勒泰市| 温州市| 容城县| 宜宾市| 烟台市| 大石桥市| 富裕县| 青冈县| 故城县| 桑植县| 花莲市| 襄垣县| 开鲁县| 于都县| 沙洋县|