DefaultConnectivityMonitor中的滑行内存泄漏

问题描述 投票:0回答:1

LeakCanary在我们的应用程序中报告了内存泄漏,并带有以下泄漏跟踪:

05-24 08:41:05.380044 16534 19408 D LeakCanary: HeapAnalysisSuccess(heapDumpFile=/data/user/0/..../files/leakcanary/2020-05-24_08-24-07_502.hprof, createdAtTimeMillis=1590334865374, analysisDurationMillis=85525, applicationLeaks=[ApplicationLeak(className=<>.media.MediaControlActivity, leakTrace=
05-24 08:41:05.380044 16534 19408 D LeakCanary: ┬
05-24 08:41:05.380044 16534 19408 D LeakCanary: ├─ android.provider.FontsContract
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    Leaking: NO (HomeApplication↓ is not leaking and a class is never leaking)
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    GC Root: System class
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    ↓ static FontsContract.sContext
05-24 08:41:05.380044 16534 19408 D LeakCanary: ├─ <>.application.HomeApplication
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    Leaking: NO (Application is a singleton)
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    HomeApplication does not wrap an activity context
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    ↓ HomeApplication.mLoadedApk
05-24 08:41:05.380044 16534 19408 D LeakCanary: │                      ~~~~~~~~~~
05-24 08:41:05.380044 16534 19408 D LeakCanary: ├─ android.app.LoadedApk
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    Leaking: UNKNOWN
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    ↓ LoadedApk.mReceivers
05-24 08:41:05.380044 16534 19408 D LeakCanary: │                ~~~~~~~~~~
05-24 08:41:05.380044 16534 19408 D LeakCanary: ├─ android.util.ArrayMap
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    Leaking: UNKNOWN
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    ↓ ArrayMap.mArray
05-24 08:41:05.380044 16534 19408 D LeakCanary: │               ~~~~~~
05-24 08:41:05.380044 16534 19408 D LeakCanary: ├─ java.lang.Object[]
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    Leaking: UNKNOWN
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    ↓ array Object[].[9]
05-24 08:41:05.380044 16534 19408 D LeakCanary: │                     ~~~
05-24 08:41:05.380044 16534 19408 D LeakCanary: ├─ android.util.ArrayMap
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    Leaking: UNKNOWN
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    ↓ ArrayMap.mArray
05-24 08:41:05.380044 16534 19408 D LeakCanary: │               ~~~~~~
05-24 08:41:05.380044 16534 19408 D LeakCanary: ├─ java.lang.Object[]
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    Leaking: UNKNOWN
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    ↓ array Object[].[58]
05-24 08:41:05.380044 16534 19408 D LeakCanary: │                     ~~~~
05-24 08:41:05.380044 16534 19408 D LeakCanary: ├─ ayf
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    Leaking: UNKNOWN
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    ↓ ayf.a
05-24 08:41:05.380044 16534 19408 D LeakCanary: │          ~
05-24 08:41:05.380044 16534 19408 D LeakCanary: ├─ ayg
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    Leaking: UNKNOWN
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    ↓ ayg.b
05-24 08:41:05.380044 16534 19408 D LeakCanary: │          ~
05-24 08:41:05.380044 16534 19408 D LeakCanary: ├─ als
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    Leaking: UNKNOWN
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    ↓ als.b
05-24 08:41:05.380044 16534 19408 D LeakCanary: │          ~
05-24 08:41:05.380044 16534 19408 D LeakCanary: ├─ alt
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    Leaking: UNKNOWN
05-24 08:41:05.380044 16534 19408 D LeakCanary: │    ↓ alt.b
05-24 08:41:05.380044 16534 19408 D LeakCanary: │          ~
05-24 08:41:05.380044 16534 19408 D LeakCanary: ╰→ <>.media.MediaControlActivity
05-24 08:41:05.380044 16534 19408 D LeakCanary: ​     Leaking: YES (Activity#mDestroyed is true and ObjectWatcher was watching this)
05-24 08:41:05.380044 16534 19408 D LeakCanary: ​     key = 758a249e-d3c7-44e3-b633-4649a5574735
05-24 08:41:05.380044 16534 19408 D LeakCanary: ​     watchDurationMillis = 5397
05-24 08:41:05.380044 16534 19408 D LeakCanary: ​     retainedDurationMillis = 393
05-24 08:41:05.380044 16534 19408 D LeakCanary: , retainedHeapByteSize=43842), ApplicationLeak(className=aym, leakTrace=
05-24 08:41:05.380044 16534 19408 D LeakCanary: ┬

经过映射文件后,我看到这些是去混淆的类:

com.bumptech.glide.manager.DefaultConnectivityMonitor$1 -> ayf

com.bumptech.glide.RequestManager$RequestManagerConnectivityListener -> als

com.bumptech.glide.manager.DefaultConnectivityMonitor -> ayg

com.bumptech.glide.RequestManager -> alt

事实证明,这是与https://github.com/bumptech/glide/issues/3631相同的问题。

我在github问题链接上看不到任何解决方案,所以在这里创建一个问题。

为避免这种泄漏,我有什么可能的解决方法?

android android-glide
1个回答
0
投票

解决方案是停止使用Glide或对库进行修复。问题注释提供了有关如何阻止泄漏发生的指导:https://github.com/bumptech/glide/issues/3631#issuecomment-488296849

© www.soinside.com 2019 - 2024. All rights reserved.