欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

android 捕獲系統(tǒng)異常并上傳日志具體實(shí)現(xiàn)

 更新時(shí)間:2013年09月04日 14:50:00   作者:  
這篇文章介紹了android 捕獲系統(tǒng)異常并上傳日志具體實(shí)現(xiàn),有需要的朋友可以參考一下

在做項(xiàng)目時(shí),經(jīng)常會(huì)把錯(cuò)誤利用異常拋出去,這樣在開發(fā)時(shí)就可以通過手機(jī)拋出的異常排查錯(cuò)誤。但是當(dāng)程序開發(fā)完畢,版本穩(wěn)定,需要上線時(shí),為了避免拋出異常影響用戶感受,可以用UncaughtExceptionHandler捕獲全局異常,對(duì)異常做出處理。比如我們可以獲取到拋出異常的時(shí)間、手機(jī)的硬件信息、錯(cuò)誤的堆棧信息,然后將獲取到的所有的信息發(fā)送到服務(wù)器中,也可以發(fā)送到指定的郵件中,以便及時(shí)修改bug。

示例:

自定義異常類實(shí)現(xiàn)UncaughtExceptionHandler接口,當(dāng)某個(gè)頁面出現(xiàn)異常就會(huì)調(diào)用uncaughtException這個(gè)方法,我們可以在這個(gè)方法中獲取異常信息、時(shí)間等,然后將獲取到的信息發(fā)送到我們指定的服務(wù)器

復(fù)制代碼 代碼如下:

/**
 * 自定義的 異常處理類 , 實(shí)現(xiàn)了 UncaughtExceptionHandler接口
 * @author Administrator
 *
 */
public class MyCrashHandler implements UncaughtExceptionHandler {
 // 需求是 整個(gè)應(yīng)用程序 只有一個(gè) MyCrash-Handler
 private static MyCrashHandler myCrashHandler ;
 private Context context;
 private DoubanService service;
 private SimpleDateFormat dataFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");

 //1.私有化構(gòu)造方法
 private MyCrashHandler(){

 }

 public static synchronized MyCrashHandler getInstance(){
  if(myCrashHandler!=null){
   return myCrashHandler;
  }else {
   myCrashHandler  = new MyCrashHandler();
   return myCrashHandler;
  }
 }
 public void init(Context context,DoubanService service){
  this.context = context;
  this.service = service;
 }
 

 public void uncaughtException(Thread arg0, Throwable arg1) {
  System.out.println("程序掛掉了 ");
  // 1.獲取當(dāng)前程序的版本號(hào). 版本的id
  String versioninfo = getVersionInfo();

  // 2.獲取手機(jī)的硬件信息.
  String mobileInfo  = getMobileInfo();

  // 3.把錯(cuò)誤的堆棧信息 獲取出來
  String errorinfo = getErrorInfo(arg1);

  // 4.把所有的信息 還有信息對(duì)應(yīng)的時(shí)間 提交到服務(wù)器
  try {
   service.createNote(new PlainTextConstruct(dataFormat.format(new Date())),
     new PlainTextConstruct(versioninfo+mobileInfo+errorinfo), "public", "yes");
  } catch (Exception e) {
   e.printStackTrace();
  }

  //干掉當(dāng)前的程序
  android.os.Process.killProcess(android.os.Process.myPid());
 }

 /**
  * 獲取錯(cuò)誤的信息
  * @param arg1
  * @return
  */
 private String getErrorInfo(Throwable arg1) {
  Writer writer = new StringWriter();
  PrintWriter pw = new PrintWriter(writer);
  arg1.printStackTrace(pw);
  pw.close();
  String error= writer.toString();
  return error;
 }

 /**
  * 獲取手機(jī)的硬件信息
  * @return
  */
 private String getMobileInfo() {
  StringBuffer sb = new StringBuffer();
  //通過反射獲取系統(tǒng)的硬件信息
  try {

   Field[] fields = Build.class.getDeclaredFields();
   for(Field field: fields){
    //暴力反射 ,獲取私有的信息
    field.setAccessible(true);
    String name = field.getName();
    String value = field.get(null).toString();
    sb.append(name+"="+value);
    sb.append("\n");
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return sb.toString();
 }

 /**
  * 獲取手機(jī)的版本信息
  * @return
  */
 private String getVersionInfo(){
  try {
   PackageManager pm = context.getPackageManager();
    PackageInfo info =pm.getPackageInfo(context.getPackageName(), 0);
    return  info.versionName;
  } catch (Exception e) {
   e.printStackTrace();
   return "版本號(hào)未知";
  }
 }
}


創(chuàng)建一個(gè)Application實(shí)例將MyCrashHandler注冊(cè)到整個(gè)應(yīng)用程序上,創(chuàng)建出服務(wù)并進(jìn)行傳遞:
復(fù)制代碼 代碼如下:

/**
 * 整個(gè)(app)程序初始化之前被調(diào)用
 * @author Administrator
 *
 */
public class DoubanApplication extends Application {
  public NoteEntry entry;
 @Override
 public void onCreate() {
  super.onCreate();
  String apiKey = "0fab7f9aa21f39cd2f027ecfe65dad67";
  String secret = "87fc1c5e99bfa5b3";
  // 獲取到service
  DoubanService myService = new DoubanService("我的小豆豆", apiKey,
    secret);
  myService.setAccessToken("1fa4e5be0f808a0b5eeeb13a2e819e21", "56a622c1138dbfce");
  MyCrashHandler handler = MyCrashHandler.getInstance();
  handler.init(getApplicationContext(),myService);
  Thread.setDefaultUncaughtExceptionHandler(handler);
 }
}

相關(guān)文章

  • Android時(shí)間對(duì)話框TimePickerDialog詳解

    Android時(shí)間對(duì)話框TimePickerDialog詳解

    這篇文章主要為大家詳細(xì)介紹了Android時(shí)間對(duì)話框TimePickerDialog的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android實(shí)現(xiàn)極簡打開攝像頭

    Android實(shí)現(xiàn)極簡打開攝像頭

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)極簡打開攝像頭,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Android 實(shí)現(xiàn)按兩次返回鍵退出程序(兩種方法)

    Android 實(shí)現(xiàn)按兩次返回鍵退出程序(兩種方法)

    這篇文章主要介紹了Android 實(shí)現(xiàn)按兩次返回鍵退出程序(兩種方法)的相關(guān)資料,這里不僅實(shí)現(xiàn)還對(duì)原理進(jìn)行了分析,需要的朋友可以參考下
    2017-07-07
  • 如何使用Kotlin進(jìn)行Android開發(fā)

    如何使用Kotlin進(jìn)行Android開發(fā)

    這篇文章主要教大家如何使用Kotlin進(jìn)行Android開發(fā),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Android 5.0 實(shí)現(xiàn)水波擴(kuò)散效果

    Android 5.0 實(shí)現(xiàn)水波擴(kuò)散效果

    這篇文章主要為大家詳細(xì)介紹了Android 5.0 實(shí)現(xiàn)水波擴(kuò)散效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Android自定義ActionBar實(shí)例

    Android自定義ActionBar實(shí)例

    這篇文章主要介紹了Android自定義ActionBar的實(shí)現(xiàn)方法,以實(shí)例形式較為詳細(xì)的分析了自定義ActionBar的原理與具體步驟,并附帶完整實(shí)例代碼供大家下載查看,需要的朋友可以參考下
    2014-11-11
  • Android實(shí)現(xiàn)長按圖片保存至相冊(cè)功能

    Android實(shí)現(xiàn)長按圖片保存至相冊(cè)功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)長按圖片保存至相冊(cè)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Android實(shí)現(xiàn)標(biāo)題上顯示隱藏進(jìn)度條效果

    Android實(shí)現(xiàn)標(biāo)題上顯示隱藏進(jìn)度條效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)標(biāo)題上顯示隱藏進(jìn)度條效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Android自定義控件實(shí)現(xiàn)通用驗(yàn)證碼輸入框(二)

    Android自定義控件實(shí)現(xiàn)通用驗(yàn)證碼輸入框(二)

    這篇文章主要為大家詳細(xì)介紹了Android自定義控件實(shí)現(xiàn)通用驗(yàn)證碼輸入框的第二篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • Android Koin2基本使用的那件事兒

    Android Koin2基本使用的那件事兒

    這篇文章主要給大家介紹了關(guān)于Android Koin2基本使用的那件事兒,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論