日韩精品福利免费观看高清,综合亚洲国产2020,99热只有精品这里,国产精品久久久久久久福利

    1. <address id="kobe1"></address>
      
      
      <td id="kobe1"><tbody id="kobe1"><listing id="kobe1"></listing></tbody></td>

        我要投稿 投訴建議

        android 捕獲系統(tǒng)異常并上傳日志的實(shí)例

        時(shí)間:2021-04-13 14:49:15 日志日記 我要投稿

        android 捕獲系統(tǒng)異常并上傳日志的實(shí)例

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

        android 捕獲系統(tǒng)異常并上傳日志的實(shí)例

          示例:

          自定義異常類實(shí)現(xiàn)UncaughtExceptionHandler接口,當(dāng)某個(gè)頁(yè)面出現(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ò)誤的堆棧信息 獲取出來(lái)

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

          //通過(guò)反射獲取系統(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);

          }

          }

        【android 捕獲系統(tǒng)異常并上傳日志的實(shí)例】相關(guān)文章:

        關(guān)于iOS 捕獲程序崩潰日志06-23

        天上傳來(lái)上帝的聲音日志04-26

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

        捕獲的近義詞12-05

        捕獲的造句05-01

        關(guān)于系統(tǒng)日志的介紹07-02

        系統(tǒng)更新日志06-23

        Linux系統(tǒng)日志子系統(tǒng)詳解06-23

        氟元素的捕獲06-08