Framework 혹은 3rd-party lib 이 뿜는 Exception 을 피해보자 ( ex) NullPointerException at acm.a ) |
현재는 문제가 되지 않겠지만, 이전 버전의 adsense lib 을 사용하다 보면, 아래와 같은 crash report 가 올라오곤 했다.
Caused by: java.lang.NullPointerException
at acm.a(SourceFile:215)
at acz.onTransact(SourceFile:58)
at android.os.Binder.transact(Binder.java:279)
at com.google.android.gms.internal.co$a$a.onCreate()
at com.google.android.gms.ads.AdActivity.onCreate()
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1622)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1674)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3694)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
at dalvik.system.NativeStart.main(NativeStart.java)
3rd party lib 에서 뿜어내는 에러로 control 하기 힘든 crash...
그러나 우리에게는 UncaughtExceptionHandler 가 있다.
아래의 코드를 Application 을 상속한 class 에 넣어주는 방식으로
Adworker thread 가 내뿜는 해당 에러를 잡을 수 있다.
final UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
if (thread.getName().startsWith("AdWorker")) {
Log.w("ADMOB", "AdWorker thread thrown an exception.", ex);
} else if (defaultHandler != null) {
defaultHandler.uncaughtException(thread, ex);
} else {
throw new RuntimeException("No default uncaught exception handler.", ex);
}
}
});
비슷한 뉘앙스로 framework 가 뿜어내는 specific 한 exception 을 우리는 피할 수 있다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] JobScheduler 의 schedule 이 fail 하는 케이스 (0) | 2018.04.29 |
---|---|
[android] JobStatus.getUID NullPointerException (0) | 2018.04.28 |
[android 보안] 사용자 관리 #2 (0) | 2018.04.21 |
[android 보안] 사용자 관리 #1 (0) | 2018.04.20 |
[android 보안] 패키지 관리 #2 (0) | 2018.04.19 |
댓글