0
전에 디스플레이 토스트 :안드로이드 : 나는이 같은 글로벌 excpetion 처리기를 사용하여 응용 프로그램을 실행시 예외 출구
나는 가까운 사용자와 쇼를 사용자에게 같은 친근한 축배를 디스플레이 힘을 피하려고public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));
}
}
"문제가 발생했습니다. .. ". 다음은 예외 핸들러 클래스입니다 :
public class ExceptionHandler implements
Thread.UncaughtExceptionHandler {
private final Context myContext;
private final String LINE_SEPARATOR = "\n";
public ExceptionHandler(Context context) {
myContext = context;
}
public void uncaughtException(Thread thread, Throwable exception) {
StringWriter stackTrace = new StringWriter();
exception.printStackTrace(new PrintWriter(stackTrace));
StringBuilder errorReport = new StringBuilder();
errorReport.append("************ CAUSE OF ERROR ************\n\n");
errorReport.append(stackTrace.toString());
Log.e("ERROR_TAG", errorReport.toString());
Utils.showShortToast(R.string.something_went_wrong, myContext);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(10);
}
},1000);
}
}
는() 토스트, 응용 프로그램 동결을 표시하는 System.exit까지 기다려야라고되어 다음 응용 프로그램이 종료 할 때 문제입니다. 그리고 아래의 refercend 질문에서 알 수 있듯이 toast를 표시 한 직후에 exit()를 호출하면 kill이 처리되고 toast가 표시되지 않습니다.
P. this, this 및 this을 읽었으나 그 중 어느 것도 해결책을 찾지 못했습니다.
왜 문제가 애플 리케이션을 종료합니다. exeptions 처리 애플 리케이션을 죽이지 말고, 일부 ErrorActivty 만들고 캐치에 가서 처리해야합니다. 당신은 표준 안드로이드 예외 - 죽이는 응용 프로그램과 같은 일을하고 있습니다, 나는 그러한 생각의 목적을 포기하지 않습니다. –
@MaciejSikora 모든 예외를 처리하려고해도 다른 이유 (개발자 실수, 개발자 지식 부족, 다양한 OS 및 플랫폼의 다양한 변형)로 인해 일부가 캐치되지 않을 수 있습니다. 그래서 나는 단지 사용자에게 famouse "Force Close .."창을 표시하지 않고 오류 로그를 저장하여 문제를 정확하게 지적하고 장래에 잡히지 않는 예외를 처리하려고합니다. 이것이 이유 다! :) – VSB
애플 리케이션 오류는 pokemons되지 않습니다, 그들을 잡을 해결할 수 :). 사고 방식을 바꾸십시오. –