本机 Admob 广告导致 window 泄漏
Native Admob ad causing window leak
我在 Activity 中展示原生广告,其中包含用于显示不同片段的 FragmentContainerView。
但是当我使用后退按钮退出应用程序时,出现以下错误
E/WindowManager: android.view.WindowLeaked: Activity com.status.statusdownload.views.MainActivity has leaked window com.google.android.gms.internal.ads.zzbft{4119d98 I.E...... ......I. 0,0-840,0} that was originally added here
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:598)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:377)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:96)
at com.google.android.gms.internal.ads.zzcen.zzh(com.google.android.gms:play-services-ads@@19.8.0:53)
at com.google.android.gms.internal.ads.zzcdf.zzb(com.google.android.gms:play-services-ads@@19.8.0:134)
at com.google.android.gms.internal.ads.zzcel.onGlobalLayout(com.google.android.gms:play-services-ads@@19.8.0:108)
at com.google.android.gms.internal.ads.zzbbl.onGlobalLayout(com.google.android.gms:play-services-ads@@19.8.0:6)
at android.view.ViewTreeObserver.dispatchOnGlobalLayout(ViewTreeObserver.java:1056)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2629)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1722)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7621)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1029)
at android.view.Choreographer.doCallbacks(Choreographer.java:852)
at android.view.Choreographer.doFrame(Choreographer.java:787)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1014)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:235)
at android.app.ActivityThread.main(ActivityThread.java:7441)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
我已按照官方文档销毁了对使用原生广告的引用 (https://developers.google.com/admob/android/native/start)
if (isDestroyed) {
unifiedNativeAd.destroy()
return@forNativeAd
}
请帮我解决这个错误。
看起来问题是由新的本机验证器引起的,当我在我的清单文件中禁用验证器时,错误消失了。由于验证器对于发布版本自动禁用。
在清单文件中使用 NATIVE_AD_DEBUGGER_ENABLED
禁用验证器可解决这两个问题。
接受的答案是正确的。但如果有人不知道它在清单中应该如何显示:
<manifest>
...
<application>
...
<meta-data
android:name="com.google.android.gms.ads.flag.NATIVE_AD_DEBUGGER_ENABLED"
android:value="false" />
</application>
</manifest>
我在 Activity 中展示原生广告,其中包含用于显示不同片段的 FragmentContainerView。 但是当我使用后退按钮退出应用程序时,出现以下错误
E/WindowManager: android.view.WindowLeaked: Activity com.status.statusdownload.views.MainActivity has leaked window com.google.android.gms.internal.ads.zzbft{4119d98 I.E...... ......I. 0,0-840,0} that was originally added here
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:598)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:377)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:96)
at com.google.android.gms.internal.ads.zzcen.zzh(com.google.android.gms:play-services-ads@@19.8.0:53)
at com.google.android.gms.internal.ads.zzcdf.zzb(com.google.android.gms:play-services-ads@@19.8.0:134)
at com.google.android.gms.internal.ads.zzcel.onGlobalLayout(com.google.android.gms:play-services-ads@@19.8.0:108)
at com.google.android.gms.internal.ads.zzbbl.onGlobalLayout(com.google.android.gms:play-services-ads@@19.8.0:6)
at android.view.ViewTreeObserver.dispatchOnGlobalLayout(ViewTreeObserver.java:1056)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2629)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1722)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7621)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1029)
at android.view.Choreographer.doCallbacks(Choreographer.java:852)
at android.view.Choreographer.doFrame(Choreographer.java:787)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1014)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:235)
at android.app.ActivityThread.main(ActivityThread.java:7441)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
我已按照官方文档销毁了对使用原生广告的引用 (https://developers.google.com/admob/android/native/start)
if (isDestroyed) {
unifiedNativeAd.destroy()
return@forNativeAd
}
请帮我解决这个错误。
看起来问题是由新的本机验证器引起的,当我在我的清单文件中禁用验证器时,错误消失了。由于验证器对于发布版本自动禁用。
在清单文件中使用 NATIVE_AD_DEBUGGER_ENABLED
禁用验证器可解决这两个问题。
接受的答案是正确的。但如果有人不知道它在清单中应该如何显示:
<manifest>
...
<application>
...
<meta-data
android:name="com.google.android.gms.ads.flag.NATIVE_AD_DEBUGGER_ENABLED"
android:value="false" />
</application>
</manifest>