android 포획 시스템 이상 및 로그 업로드 구체화

4483 단어
프로젝트를 할 때 오류를 이상을 이용하여 던지는 경우가 많기 때문에 개발할 때 휴대전화에서 던지는 이상을 통해 오류를 조사할 수 있다.그러나 프로그램 개발이 완료되고 버전이 안정적이어서 접속이 필요할 때 이상을 던져 사용자의 체감에 영향을 주지 않도록 UncaughtExceptionHandler로 전역 이상을 포획해 이상을 처리할 수 있다.예를 들어 우리는 이상한 시간, 휴대전화의 하드웨어 정보, 잘못된 창고 정보를 얻은 다음에 얻은 모든 정보를 서버에 보낼 수도 있고 지정된 메일로 보내서 버그를 제때에 수정할 수도 있다.
예:
사용자 정의 이상 클래스는 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("
");
   }
  } 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);
 }
}

좋은 웹페이지 즐겨찾기