[Android] RewardedAd cause memory leak (v20.1.0)

308 views
Skip to first unread message

Kamil Mikusek

unread,
May 21, 2021, 5:05:42 PM5/21/21
to Google Mobile Ads SDK Developers
Available to reproduce from sample code below:
https://github.com/googleads/googleads-mobile-android-examples/tree/master/kotlin/admob/RewardedVideoExample

2021-05-21 22:36:29.133 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​
2021-05-21 22:36:29.133 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ====================================
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: HEAP ANALYSIS RESULT
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ====================================
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: 2 APPLICATION LEAKS
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: References underlined with "~~~" are likely causes.
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: Learn more at https://squ.re/leaks.
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: 228250 bytes retained by leaking objects
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: Signature: ed4ab31ee7d465b648e23b4f90463b8c2df26a1d
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ┬───
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ GC Root: Global variable in native code
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ├─ com.google.android.gms.dynamic.ObjectWrapper instance
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Leaking: UNKNOWN
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Retaining 528 B in 1 objects
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ ↓ ObjectWrapper.a
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ ~
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ├─ com.google.android.gms.ads.internal.webview.y instance
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Leaking: UNKNOWN
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Retaining 5,8 kB in 87 objects
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ View not part of a window view hierarchy
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ View.mAttachInfo is null (view detached)
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ View.mWindowAttachCount = 1
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ mContext instance of com.google.android.gms.ads.internal.webview.aw, wrapping android.app.Application
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ ↓ y.a
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ ~
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ├─ com.google.android.gms.ads.internal.webview.ac instance
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Leaking: UNKNOWN
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Retaining 15,5 kB in 382 objects
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ View not part of a window view hierarchy
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ View.mAttachInfo is null (view detached)
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ View.mWindowAttachCount = 1
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ p instance of com.google.android.gms.ads.internal.webview.aw, wrapping android.app.Application
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ mContext instance of com.google.android.gms.ads.internal.webview.aw, wrapping android.app.Application
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ ↓ ac.W
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ ~
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ├─ android.view.WindowManagerImpl instance
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Leaking: UNKNOWN
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Retaining 75,7 kB in 1064 objects
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ mContext instance of android.app.ContextImpl
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ ↓ WindowManagerImpl.mContext
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ ~~~~~~~~
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ├─ android.app.ContextImpl instance
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Leaking: YES (ContextImpl.mOuterContext is an instance of com.google.android.gms.example.rewardedvideoexample.
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ MainActivity with Activity.mDestroyed true)
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Retaining 8,9 kB in 103 objects
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ mAutofillClient instance of com.google.android.gms.example.rewardedvideoexample.MainActivity with mDestroyed = true
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ mOuterContext instance of com.google.android.gms.example.rewardedvideoexample.MainActivity with mDestroyed = true
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ ↓ ContextImpl.mAutofillClient
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ╰→ com.google.android.gms.example.rewardedvideoexample.MainActivity instance
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ Leaking: YES (ObjectWatcher was watching this because com.google.android.gms.example.rewardedvideoexample.
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ MainActivity received Activity#onDestroy() callback and Activity#mDestroyed is true)
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ Retaining 228,3 kB in 1871 objects
2021-05-21 22:36:29.134 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ key = 6e539c98-1a1d-4cbd-89f3-75809887d3b4
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ watchDurationMillis = 5302
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ retainedDurationMillis = 291
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ mApplication instance of android.app.Application
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ mBase instance of androidx.appcompat.view.ContextThemeWrapper
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: 29284 bytes retained by leaking objects
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: Signature: 742f85aaec0987b15ad84e11eb6eec0f3f90af
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ┬───
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ GC Root: Global variable in native code
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ├─ com.google.android.gms.dynamic.ObjectWrapper instance
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Leaking: UNKNOWN
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Retaining 528 B in 1 objects
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ ↓ ObjectWrapper.a
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ ~
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ├─ com.google.android.gms.ads.internal.webview.y instance
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Leaking: UNKNOWN
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Retaining 5,8 kB in 87 objects
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ View not part of a window view hierarchy
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ View.mAttachInfo is null (view detached)
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ View.mWindowAttachCount = 1
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ mContext instance of com.google.android.gms.ads.internal.webview.aw, wrapping android.app.Application
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ ↓ y.a
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ ~
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ├─ com.google.android.gms.ads.internal.webview.ac instance
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Leaking: UNKNOWN
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Retaining 15,5 kB in 382 objects
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ View not part of a window view hierarchy
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ View.mAttachInfo is null (view detached)
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ View.mWindowAttachCount = 1
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ p instance of com.google.android.gms.ads.internal.webview.aw, wrapping android.app.Application
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ mContext instance of com.google.android.gms.ads.internal.webview.aw, wrapping android.app.Application
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ ↓ ac.W
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ ~
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ├─ android.view.WindowManagerImpl instance
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Leaking: UNKNOWN
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Retaining 75,7 kB in 1064 objects
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ mContext instance of android.app.ContextImpl
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ ↓ WindowManagerImpl.mParentWindow
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ ~~~~~~~~~~~~~
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ├─ com.android.internal.policy.PhoneWindow instance
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Leaking: YES (Window#mDestroyed is true)
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ Retaining 29,3 kB in 548 objects
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ mContext instance of com.google.android.gms.example.rewardedvideoexample.MainActivity with mDestroyed = true
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ mOnWindowDismissedCallback instance of com.google.android.gms.example.rewardedvideoexample.MainActivity with
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ mDestroyed = true
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: │ ↓ PhoneWindow.mDecor
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ╰→ com.android.internal.policy.DecorView instance
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ Leaking: YES (ObjectWatcher was watching this because com.android.internal.policy.DecorView received
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ View#onDetachedFromWindow() callback and View.mContext references a destroyed activity)
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ Retaining 10,0 kB in 191 objects
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ key = 9bdf4ec3-aea8-4168-90c9-933da59cea93
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ watchDurationMillis = 5275
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ retainedDurationMillis = 273
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ View not part of a window view hierarchy
2021-05-21 22:36:29.135 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ View.mAttachInfo is null (view detached)
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ View.mWindowAttachCount = 1
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ mContext instance of com.android.internal.policy.DecorContext, wrapping activity com.google.android.gms.example.
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ​ rewardedvideoexample.MainActivity with mDestroyed = true
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ====================================
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: 0 LIBRARY LEAKS
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: A Library Leak is a leak caused by a known bug in 3rd party code that you do not have control over.
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: See https://square.github.io/leakcanary/fundamentals-how-leakcanary-works/#4-categorizing-leaks
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ====================================
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: 0 UNREACHABLE OBJECTS
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: An unreachable object is still in memory but LeakCanary could not find a strong reference path
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: from GC roots.
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ====================================
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: METADATA
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: Please include this in bug reports and Stack Overflow questions.
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: Build.VERSION.SDK_INT: 30
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: Build.MANUFACTURER: samsung
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: LeakCanary version: 2.6
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: App process name: com.google.android.gms.example.rewardedvideoexample
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: Stats: LruCache[maxSize=3000,hits=3269,misses=98056,hitRate=3%]
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: RandomAccess[bytes=4544654,reads=98056,travel=72412545033,range=40146196,size=49654289]
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: Heap dump reason: 4 retained objects, app is not visible
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: Analysis duration: 11557 ms
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: Heap dump file path: /storage/emulated/0/Download/leakcanary-com.google.android.gms.example.
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: rewardedvideoexample/2021-05-21_22-36-06_978.hprof
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: Heap dump timestamp: 1621629389091
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: Heap dump duration: 10328 ms
2021-05-21 22:36:29.136 18204-27460/com.google.android.gms.example.rewardedvideoexample D/LeakCanary: ====================================

Mobile Ads SDK Forum Advisor Prod

unread,
May 24, 2021, 12:57:22 AM5/24/21
to mikuse...@gmail.com, google-adm...@googlegroups.com

Hi Kamil,

Thank you for reaching out to us.

I tried our sample app and I wasn't able to reproduce the memory leak that been happening to you. If you can provide us the following additional details via Reply privately to author option or send it directly to mobileads...@gmail.com.

  • Device used and version.
  • Steps to replicate.
  • Memory profiler (screen recording) that shows memory leak.
  • Sample app if you done a modification on it.

Regards,

Google Logo
Princess Pamela Pineda
Mobile Ads SDK Team
 


ref:_00D1U1174p._5004Q2HCqGt:ref
Reply all
Reply to author
Forward
0 new messages