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("
");
}
} 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);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.