Catch all AdMob crashes?

Viewed 919

AdMob for Android is responsible for over 90% of crashes and ANRs in all of my apps. All of these crashes have been reported to AdMob going back years and despite all the workarounds and updates the crashes keep popping up. Sometimes one crash will be fixed but replaced with an ANR. Sometimes everything will work fine and then one day I get hundreds of crashes.

I'm sure there are reasons why the AdMob team can't fix everything, but is there a clever way for my app to catch all crashes that are caused by the AdMob plugin?

An example:

Fatal Exception: java.util.concurrent.TimeoutException: com.google.android.gms.ads.nonagon.ad.interstitial.b.finalize() timed out after 10 seconds
       at com.google.android.gms.ads.internal.webview.j.k(j.java:3)
       at com.google.android.gms.ads.internal.webview.v.destroy(v.java:4)
       at com.google.android.gms.ads.internal.webview.t.destroy(t.java:10)
       at com.google.android.gms.ads.nonagon.ad.interstitial.b.finalize(b.java:2)
       at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:217)
       at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:200)
       at java.lang.Thread.run(Thread.java:818)

And another:

Caused by java.lang.IllegalStateException: Only fullscreen activities can request orientation
       at android.os.Parcel.readException(Parcel.java:1975)
       at android.os.Parcel.readException(Parcel.java:1913)
       at android.app.IActivityManager$Stub$Proxy.setRequestedOrientation(IActivityManager.java:6186)
       at android.app.Activity.setRequestedOrientation(Activity.java:5840)
       at com.google.android.gms.ads.internal.overlay.zzd.close(zzd.java:146)
       at com.google.android.gms.ads.internal.overlay.zzd.zznh(zzd.java:166)
       at com.google.android.gms.ads.internal.overlay.zzd.close(zzd.java:61)
       at com.google.android.gms.ads.internal.overlay.client.c.a(c.java:33)
       at og.onTransact(og.java:4)
       at android.os.Binder.transact(Binder.java:612)
       at com.google.android.gms.internal.ads.zzej.transactAndReadExceptionReturnVoid(zzej.java:7)
       at com.google.android.gms.internal.ads.zzaar.onCreate(zzaar.java:8)
       at com.google.android.gms.ads.AdActivity.onCreate(AdActivity.java:29)
       at android.app.Activity.performCreate(Activity.java:7183)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
       at android.app.ActivityThread.-wrap11(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
       at android.os.Handler.dispatchMessage(Handler.java:105)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6944)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

And another:

Caused by java.lang.ClassNotFoundException: Didn't find class "org.apache.http.ProtocolVersion" on path: DexPathList[[zip file "/data/user_de/0/com.google.android.gms/app_chimera/m/00000099/dl-AdsFdrDynamite.integ_20290000008.apk"],nativeLibraryDirectories=[/data/user_de/0/com.google.android.gms/app_chimera/m/00000099/n/armeabi-v7a, /data/user_de/0/com.google.android.gms/app_chimera/m/00000099/n/armeabi, /system/lib]]
       at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
       at ab.loadClass(ab.java:4)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
       at ly.b(ly.java:2)
       at lx.a(lx.java:1)
       at lz.a(lz.java:29)
       at com.google.android.gms.ads.internal.util.aq.a(aq.java:10)
       at lc.a(lc.java:8)
       at lc.run(lc.java:2)

Obviously I don't care if ads don't show up in these cases, I just don't want most of my work on my apps to be dealing with AdMob and I don't want AdMob lowering my Android vitals. I'd choose another ad provider but I don't know whether they'll have these problems as well (I don't see why they wouldn't).

0 Answers
Related