人人妻人人,亚洲人妻丝袜一区电影,日韩少妇熟女专区,午夜欧美成人在线一线天,午夜精品一区二区免费看,一区二区三区综合激情,亚洲99精品热九九,卡一卡二卡三卡四精品在线,miaa-311在线看

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

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

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

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

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

  示例:

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

  復制代碼 代碼如下:

  /**

  * 自定義的 異常處理類 , 實現(xiàn)了 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();

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

  }

  /**

  * 獲取手機的版本信息

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

  }

  }

  }

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

  復制代碼 代碼如下:

  /**

  * 整個(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)異常并上傳日志的實例】相關文章:

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

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

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

捕獲的近義詞12-05

捕獲的造句05-01

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

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

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

氟元素的捕獲06-08

藁城市| 五莲县| 区。| 出国| 酒泉市| 武陟县| 神农架林区| 仁怀市| 虎林市| 甘洛县| 浑源县| 孟州市| 新泰市| 巴塘县| 徐闻县| 西吉县| 扎鲁特旗| 盐池县| 海兴县| 日土县| 祥云县| 襄汾县| 洪江市| 塘沽区| 淳安县| 绥芬河市| 卢氏县| 金川县| 彩票| 东台市| 阳原县| 宁阳县| 安达市| 城市| 耒阳市| 信阳市| 苗栗县| 莒南县| 慈溪市| 汪清县| 岳普湖县|