2012-11-30 1 views
3

this answer에서 언급 한 것처럼 전역 예외 처리 서비스를 설정하려고합니다. 이 방법은 충돌 후, 내 사용자 지정 Thread.UncaughtExceptionHandler의 코드가 성공적으로 실행되지 않을 수 있기 때문에 논리적 소리, 두 응용 프로그램이 안정된 상태 나 때문에하지 않을 수 있기 때문에 프로세스가 OS에 의해 살해되기 전에 시간이 충분하지 않을 수 있습니다.Thread.UncaughtExceptionHandler에서 서비스를 시작 하시겠습니까?

불행하게도,이 방법은 그것이 너무 살해되도록 서비스가 동일한 프로세스에서 실행하기 때문에 작동하지 않습니다. 처리기의 uncaughtException()에서 서비스를 시작하려면 어떻게해야합니까? 서비스를 완전히 별도의 프로세스로 시작하도록 할 수 있습니까?


이 같은 Application에서 내 사용자 지정 기본 (VM 수준) 예외 핸들러를 설정 해요 : 내 사용자 지정 처리기에서

public class MyApp extends Application {  
    @Override 
    public void onCreate() { 
     Thread.setDefaultUncaughtExceptionHandler(
      MyExceptionReporter.getInstance(this)); 
     ... 

, 나는 실행하고있어이 같은 서비스 :

final Intent i = new Intent(MyExceptionService.INTENT); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
i.putExtra(MyExceptionService.EXTRA_STACK_TRACE, 
    Log.getStackTraceString(ex)); 
mContext.startService(i); 

서비스는 AndroidMaifest.xml 파일에 declated 및 다른 응용 프로그램에서에서 잘 실행됩니다.

답변

6

아, 나는이 문제를 알아 냈어. 열쇠는 별도의 프로세스에서 실행하는 서비스를 강제로 매니페스트에 android:process을 추가했다. 이렇게하면 응용 프로그램이 종료 될 때 서비스가 중지되지 않습니다.

<service 
    android:name="your.package.blah.blah.MyExceptionService" 
    android:process=":exception" > 
    <intent-filter> 
     <action android:name="your.package.blah.blah.REPORT" /> 
    </intent-filter> 
    </service> 
+1

당신의 선생님은 내 인생을 저장 – javorosas