googleads-consent-sdk-android icon indicating copy to clipboard operation
googleads-consent-sdk-android copied to clipboard

ConsentForm::show causes a leak on device rotation, please add ConsentForm::dismiss

Open efryntov opened this issue 6 years ago • 3 comments

ConsentForm::show causes "parent" activity leak when activity is destroyed on rotation:

07-03 15:59:09.627 18750-18750/com.xxxxx E/WindowManager: android.view.WindowLeaked: Activity xxxxx has leaked window DecorView@73fbeee[] that was originally added here
        at android.view.ViewRootImpl.<init>(ViewRootImpl.java:510)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:358)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
        at android.app.Dialog.show(Dialog.java:346)
        at com.google.ads.consent.ConsentForm.show(ConsentForm.java:359)
...
        at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
        at org.chromium.base.SystemMessageHandler.handleMessage(PG:9)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6703)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:769)
...

Please consider adding a public ConsentForm::dismiss call through to the private dialog::dismiss so it can be called in Activity::onDestroy.

Thank you.

efryntov avatar Jul 03 '18 20:07 efryntov

how do you reproduce this ?

Izzyjm avatar Feb 02 '19 04:02 Izzyjm

Bug persists on version 1.0.7. Tried on a HTC Desire running API 16.

Reproduce by:

  • Create an activity with a field to the currently showing consent form (I guess do not set to null in onDestroy)
  • Rotate screen once consent screen is loaded
06-26 12:07:28.555 22315-22315/my.app. E/WindowManager: Activity my.app.ExampleActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{425011c8 V.E..... R....... 0,0-1280,720} that was originally added here
    android.view.WindowLeaked: Activity my.app.ExampleActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{425011c8 V.E..... R....... 0,0-1280,720} that was originally added here
        at android.view.ViewRootImpl.<init>(ViewRootImpl.java:458)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:216)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:94)
        at android.app.Dialog.show(Dialog.java:286)
        at com.google.ads.consent.ConsentForm.show(ConsentForm.java:359)
        at my.app.showCurrentForm(BPFontActivity.kt:516)
        at my.app.MyConsentFormListener.onConsentFormLoaded(MyConsentFormListener.kt:12)
        at com.google.ads.consent.ConsentForm.handleLoadComplete(ConsentForm.java:285)
        at com.google.ads.consent.ConsentForm.access$600(ConsentForm.java:46)
        at com.google.ads.consent.ConsentForm$2.handleUrl(ConsentForm.java:107)
        at com.google.ads.consent.ConsentForm$2.onLoadResource(ConsentForm.java:122)
        at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:565)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:158)
        at android.app.ActivityThread.main(ActivityThread.java:5751)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1083)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:850)
        at dalvik.system.NativeStart.main(Native Method)

In addition to the memory leak being bad, being able to dismiss the pop-up from the API seem like a good feature to have. It must've been implemented internally so you could just expose the method?

digitalheir avatar Jun 26 '19 10:06 digitalheir

Bump. Issue still exists.

2020-07-11 17:28:12.973 22218-22218/ E/WindowManager: android.view.WindowLeaked: Activity has leaked window DecorView@1660e95[MainActivity] that was originally added here
        at android.view.ViewRootImpl.<init>(ViewRootImpl.java:518)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:346)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:94)
        at android.app.Dialog.show(Dialog.java:329)
        at com.google.ads.consent.ConsentForm.show(ConsentForm.java:359)
        at xxx.Activity.showCurrentForm(BPFontActivity.kt:1045)
        at xxx.Activity$consentFormListener$1.onConsentFormLoaded(BPFontActivity.kt:567)
        at com.google.ads.consent.ConsentForm.handleLoadComplete(ConsentForm.java:285)
        at com.google.ads.consent.ConsentForm.access$600(ConsentForm.java:46)
        at com.google.ads.consent.ConsentForm$2.handleUrl(ConsentForm.java:107)
        at com.google.ads.consent.ConsentForm$2.shouldOverrideUrlLoading(ConsentForm.java:130)
        at org.chromium.android_webview.AwContentsClientBridge.shouldOverrideUrlLoading(chromium-Monochrome.aab-stable-410410673:16)

digitalheir avatar Jul 11 '20 15:07 digitalheir