2016-08-10 8 views
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, thisthis을 읽었으나 그 중 어느 것도 해결책을 찾지 못했습니다.

+2

왜 문제가 애플 리케이션을 종료합니다. exeptions 처리 애플 리케이션을 죽이지 말고, 일부 ErrorActivty 만들고 캐치에 가서 처리해야합니다. 당신은 표준 안드로이드 예외 - 죽이는 응용 프로그램과 같은 일을하고 있습니다, 나는 그러한 생각의 목적을 포기하지 않습니다. –

+0

@MaciejSikora 모든 예외를 처리하려고해도 다른 이유 (개발자 실수, 개발자 지식 부족, 다양한 OS 및 플랫폼의 다양한 변형)로 인해 일부가 캐치되지 않을 수 있습니다. 그래서 나는 단지 사용자에게 famouse "Force Close .."창을 표시하지 않고 오류 로그를 저장하여 문제를 정확하게 지적하고 장래에 잡히지 않는 예외를 처리하려고합니다. 이것이 이유 다! :) – VSB

+0

애플 리케이션 오류는 pokemons되지 않습니다, 그들을 잡을 해결할 수 :). 사고 방식을 바꾸십시오. –

답변

-1

onDestroy()에서 건배하십시오. 나는 그것이 좋은 방법이라고 생각합니다 :)

최고의 레가