Android--非キャプチャ例外の処理方法
アプリケーションの実行中に多くの異常が発生する可能性がありますが、異常が発生したときに最初の時間に現場を保存したいと考えています.
未キャプチャの例外をどのように処理しますか?
まずインタフェースjavaを実現します.lang.Thread.UncaughtExceptionHandlerは、このインタフェースの
ActivityのonCreate関数に入るときに、未キャプチャ例外の処理を設定します
[java] view plain copy print ?
Thread.setDefaultUncaughtExceptionHandler(
new org.geometerplus.zlibrary.ui.android.library.UncaughtExceptionHandler(this)
);
異常が発生した場合の処理.
[java] view plain copy print ?
public class UncaughtExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler {
private final Context myContext;
public UncaughtExceptionHandler(Context context) {
myContext = context;
}
public void uncaughtException(Thread thread, Throwable exception) {
StringWriter stackTrace = new StringWriter();
exception.printStackTrace(new PrintWriter(stackTrace));
System.err.println(stackTrace);
Intent intent = new Intent(
"android.fbreader.action.CRASH",
new Uri.Builder().scheme(exception.getClass().getSimpleName()).build()
);
try {
myContext.startActivity(intent);
} catch (ActivityNotFoundException e) {
intent = new Intent(myContext, BugReportActivity.class);
intent.putExtra(BugReportActivity.STACKTRACE, stackTrace.toString());
myContext.startActivity(intent);
}
if (myContext instanceof Activity) {
((Activity)myContext).finish();
}
Process.killProcess(Process.myPid());
System.exit(10);
}
}
このようにすることで、まずユーザ体験を向上させ、強制閉鎖の問題の発生を回避することができる.異常情報をより効率的に収集します.
未キャプチャの例外をどのように処理しますか?
まずインタフェースjavaを実現します.lang.Thread.UncaughtExceptionHandlerは、このインタフェースの
uncaughtException(Thread t, Throwable e)
を実現するには、この関数でいくつかの処理を行うことができます.たとえば、sdcard上の場所に異常情報を保存したり、ユーザーに異常の発生を促すなどの操作があります.ActivityのonCreate関数に入るときに、未キャプチャ例外の処理を設定します
[java] view plain copy print ?
Thread.setDefaultUncaughtExceptionHandler(
new org.geometerplus.zlibrary.ui.android.library.UncaughtExceptionHandler(this)
);
異常が発生した場合の処理.
[java] view plain copy print ?
public class UncaughtExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler {
private final Context myContext;
public UncaughtExceptionHandler(Context context) {
myContext = context;
}
public void uncaughtException(Thread thread, Throwable exception) {
StringWriter stackTrace = new StringWriter();
exception.printStackTrace(new PrintWriter(stackTrace));
System.err.println(stackTrace);
Intent intent = new Intent(
"android.fbreader.action.CRASH",
new Uri.Builder().scheme(exception.getClass().getSimpleName()).build()
);
try {
myContext.startActivity(intent);
} catch (ActivityNotFoundException e) {
intent = new Intent(myContext, BugReportActivity.class);
intent.putExtra(BugReportActivity.STACKTRACE, stackTrace.toString());
myContext.startActivity(intent);
}
if (myContext instanceof Activity) {
((Activity)myContext).finish();
}
Process.killProcess(Process.myPid());
System.exit(10);
}
}
このようにすることで、まずユーザ体験を向上させ、強制閉鎖の問題の発生を回避することができる.異常情報をより効率的に収集します.