0

나는 라이브러리 모듈 "A"를 android 응용 프로그램 (래퍼)의 application.onCreate()에서 초기화했습니다. 모듈 "A"에 캐치되지 않은 예외가있는 경우 모듈은 수신자가 수신해야하는 브로드 캐스트를 모듈 "B"에 보냅니다.이 브로드 캐스트는 정보를 서버로 보냅니다.하나의 라이브러리 모듈에서 캐치되지 않은 예외를 잡아서 다른 라이브러리 모듈에서 수신해야하는 브로드 캐스트를 보내는 방법

이제 예외는 모듈 "B"에서 예외가 발견되면 브로드 캐스트를 전송하지만 결코 수신되지 않고 응용 프로그램이 중단됩니다.

내 코드는 모듈 A의 유일한 활동 onCreate()에 있습니다. LocalBroadcastManager를 사용하여 브로드 캐스트를 보냅니다. 여러 활동이 당신이 로그를 처리하는 현재 응용 프로그램을 종료하고 버그 리포트를 보내 새로운 응용 프로그램/활동을 시작할 수 있습니다 핸들러 내부 응용 프로그램 클래스의 캐치되지 않는 핸들러를 설정 한 경우

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { 
      @Override 
      public void uncaughtException(Thread thread, Throwable ex) { 
       trackCardInfoSessionEnd(CardInfoAnalyticsConstants.CARD_INFO_BROADCAST_SESSION_END, "failed"); 
       finish(); 
      } 
     }); 

답변

0

.

public class MyApp extends Application { 

@Override 
public void onCreate() { 
    super.onCreate(); 

    Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { 
     @Override 
     public void uncaughtException(Thread thread, Throwable ex) { 
      trackCardInfoSessionEnd(CardInfoAnalyticsConstants.CARD_INFO_BROADCAST_SESSION_END, "failed"); 
      android.os.Process.killProcess(android.os.Process.myPid()); 
      System.exit(10); 
     } 
    }); 
} 

}

this 링크를 확인하시기 바랍니다.

+0

내가 찾던 답변이 아닙니다. android.os.Process.killProcess (android.os.Process.myPid()); 또는 System.exit (10); 방송 수신자가 의도를 받아 처리 할 수 ​​없도록 앱을 종료합니다. 처리를 끝내지 않고 단지 활동을 끝내는 동안 처리가 필요합니다. – Rahul

+0

1. 모든 안드로이드 구성 요소는 메인 스레드에서 실행됩니다. – Praveen

+1

1. 모든 안드로이드 구성 요소 (활동, 서비스, 브로드 캐스트 리시버)는 메인 스레드에서 실행됩니다. 2. 캐치되지 않는 예외는 발생하는 스레드를 기반으로 처리됩니다. 3. 스레드에서 예외가 발생하면 해당 스레드에 대해 dispatchUncaughtException 핸들러가 호출되고 스레드가 종료됩니다. http://www.javamex.com/tutorials/exceptions/exceptions_uncaught_handler.shtml. 4. 메인 스레드에서 예외가 발생하면 메인 스레드가 종료되어 앱의 다른 구성 요소가 종료됩니다. 그러나 보류중인 의도 및 경보 관리자를 사용하여 구성 요소를 다시 시작할 수는 있지만 올바른 사용 사례는 아닙니다. – Praveen