• <cite id="7326f"></cite>
    <sub id="7326f"></sub>

  • <legend id="7326f"></legend>
    <thead id="7326f"></thead>

  • 午夜免费福利小电影,日韩精品亚洲专在线电影,最新偷拍一区二区三区,国产精品多p对白交换绿帽,澳门永久av免费网站,亚洲国产日韩a在线播放,亚洲国产精品高清线久久,日日噜噜夜夜狠狠视频

    android 捕獲系統異常并上傳日志的實例

    時間:2021-04-13 14:49:15 日志日記

    android 捕獲系統異常并上傳日志的實例

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

    android 捕獲系統異常并上傳日志的實例

      示例:

      自定義異常類實現UncaughtExceptionHandler接口,當某個頁面出現異常就會調用uncaughtException這個方法,我們可以在這個方法中獲取異常信息、時間等,然后將獲取到的信息發送到我們指定的服務器

      復制代碼 代碼如下:

      /**

      * 自定義的 異常處理類 , 實現了 UncaughtExceptionHandler接口

      * @author Administrator

      *

      */

      public class MyCrashHandler implements UncaughtExceptionHandler {

      // 需求是 整個應用程序 只有一個 MyCrash-Handler

      private static MyCrashHandler myCrashHandler ;

      private Context context;

      private DoubanService service;

      private SimpleDateFormat dataFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");

      //1.私有化構造方法

      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.獲取當前程序的版本號. 版本的id

      String versioninfo = getVersionInfo();

      // 2.獲取手機的'硬件信息.

      String mobileInfo = getMobileInfo();

      // 3.把錯誤的堆棧信息 獲取出來

      String errorinfo = getErrorInfo(arg1);

      // 4.把所有的信息 還有信息對應的時間 提交到服務器

      try {

      service.createNote(new PlainTextConstruct(dataFormat.format(new Date())),

      new PlainTextConstruct(versioninfo+mobileInfo+errorinfo), "public", "yes");

      } catch (Exception e) {

      e.printStackTrace();

      }

      //干掉當前的程序

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

      }

      /**

      * 獲取錯誤的信息

      * @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;

      }

      /**

      * 獲取手機的硬件信息

      * @return

      */

      private String getMobileInfo() {

      StringBuffer sb = new StringBuffer();

      //通過反射獲取系統的硬件信息

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

      }

      /**

      * 獲取手機的版本信息

      * @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 "版本號未知";

      }

      }

      }

      創建一個Application實例將MyCrashHandler注冊到整個應用程序上,創建出服務并進行傳遞:

      復制代碼 代碼如下:

      /**

      * 整個(app)程序初始化之前被調用

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

      }

      }

    【android 捕獲系統異常并上傳日志的實例】相關文章:

    關于iOS 捕獲程序崩潰日志06-23

    天上傳來上帝的聲音日志04-26

    有多少異常改為正常的心情日志05-08

    捕獲的近義詞12-05

    捕獲的造句05-01

    關于系統日志的介紹07-02

    系統更新日志06-23

    Linux系統日志子系統詳解06-23

    氟元素的捕獲06-08

    主站蜘蛛池模板: 在线视频一区二区三区色| 免费国产1区2区3区4区| 精品视频不卡免费观看| 亚洲av成人无码精品电影在线| 激情内射人妻1区2区3区| 午夜福利精品视频| 日韩av一中美av一中文字慕 | 国产精品高清国产三级囯产AV| 欧美涩色| 成人免费777777| jizz亚洲AV| 少妇被粗大的猛烈进出动视频| 国内精品伊人久久久久av| 久久九九久精品国产免费直播| 国产玖玖| 7777精品伊人久久久大香线蕉全新功能| 亚洲不卡无码永久在线观看 | 97se综合| 国产地址二永久伊甸园| 国产成人专区| 国产av一区二区三区天堂综合网 | 中国少妇无码专区| 人人做人人妻人人精| 印度成人无码AV| 色欲色香综合网| 亚洲春色无码AV专区| AV极品无码专区亚洲AV| 不卡的无码AV| 日本阿v片在线播放免费| 亚洲午夜久久久影院伊人| 国产自偷自拍| 亚洲成人资源网| 插穴网站| 99久热只有精品视频最新| jk白丝喷浆| 欧美日本在线一区二区三区| 大香蕉一区二区三区| 亚洲一人综合| 亚洲欧洲精品成人久久曰不卡| 亚洲欧洲日产国无高清码图片| 亚洲日本久久久|