Android 泄漏Canary FirestoreRecyclerAdapter内存泄漏

Android 泄漏Canary FirestoreRecyclerAdapter内存泄漏,android,android-recyclerview,memory-leaks,leakcanary,Android,Android Recyclerview,Memory Leaks,Leakcanary,我得到这个泄漏金丝雀内存泄漏,似乎从回收视图 D/LeakCanary: ==================================== HEAP ANALYSIS RESULT ==================================== 0 APPLICATION LEAKS References underlined with "~~~" are likely causes. Learn more at https://squ.re/leaks. =========

我得到这个泄漏金丝雀内存泄漏,似乎从回收视图

D/LeakCanary: ====================================
HEAP ANALYSIS RESULT
====================================
0 APPLICATION LEAKS

References underlined with "~~~" are likely causes.
Learn more at https://squ.re/leaks.
====================================
1 LIBRARY LEAKS

Library Leaks are leaks coming from the Android Framework or Google libraries.

Leak pattern: instance field android.view.ViewGroup$ViewLocationHolder#mRoot
Description: In Android P, ViewLocationHolder has an mRoot field that is not cleared in its clear() method. Introduced in https://github.com/aosp-mirror/platform_frameworks_base/commit/86b326012813f09d8f1de7d6d26c986a909d Bug report: https://issuetracker.google.com/issues/112792715
40271 bytes retained by leaking objects
Signature: 64becd25d6156daa91df6572a75b6a28ddb1
┬───
│ GC Root: System class
│
├─ android.view.ViewGroup$ViewLocationHolder class
│    Leaking: NO (a class is never leaking)
│    ↓ static ViewGroup$ViewLocationHolder.sPool
│                                          ~~~~~
├─ android.util.Pools$SynchronizedPool instance
│    Leaking: UNKNOWN
│    ↓ Pools$SynchronizedPool.mPool
│                             ~~~~~
├─ java.lang.Object[] array
│    Leaking: UNKNOWN
│    ↓ Object[].[0]
│               ~~~
├─ android.view.ViewGroup$ViewLocationHolder instance
│    Leaking: UNKNOWN
│    ↓ ViewGroup$ViewLocationHolder.mRoot
│                                   ~~~~~
├─ androidx.recyclerview.widget.RecyclerView instance
│    Leaking: YES (View.mContext references a destroyed activity)
│    mContext instance of com.android.rangroceryshopping.collaborate.CollaborateActivity with mDestroyed = true
│    View#mParent is set
│    View#mAttachInfo is null (view detached)
│    View.mID = R.id.collaborate_rv
│    View.mWindowAttachCount = 1
│    ↓ RecyclerView.mContext
╰→ com.android.rangroceryshopping.collaborate.CollaborateActivity instance
​     Leaking: YES (ObjectWatcher was watching this because com.android.rangroceryshopping.collaborate.CollaborateActivity received Activity#onDestroy() callback and Activity#mDestroyed is true)
​     key = d9d8e345-f645-4b3c-9f3e-5d5b7fd2cb4b
​     watchDurationMillis = 306199
​     retainedDurationMillis = 301199

====================================
METADATA

Please include this in bug reports and Stack Overflow questions.

Build.VERSION.SDK_INT: 28
Build.MANUFACTURER: samsung
LeakCanary version: 2.2
App process name: com.android.rangroceryshopping
Analysis duration: 18611 ms
Heap dump file path: /data/user/0/com.android.rangroceryshopping/files/leakcanary/2020-03-02_08-45-57_485.hprof
Heap dump timestamp: 1583131584691
====================================
我剥离了适配器,它主要只包含FirestoreRecyclerAdapter扩展相关变量。没有静态值,没有上下文,没有侦听器。我在另一个活动中有一个类似的适配器,没有任何问题

我还尝试将回收器的适配器设置为null,甚至在桌面上设置LayoutManager。还是没用

@Override
protected void onStop() {
    super.onStop();
    if (mAdapter != null) {
        mRecyclerView.setLayoutManager( null );
        mRecyclerView.setAdapter( null );
        mAdapter.stopListening();
    }
}
这不可能是安卓系统泄露,因为其他活动也在使用相同的漏洞,对吗

在泄漏信息时,我看到了这些链接,但我不确定我是否理解


答案在您粘贴的跟踪描述中:)

描述:在Android p中,ViewLocationHolder有一个mRoot字段,该字段在其clear()方法中未被清除。缺陷报告中介绍:


这是一个已知的Android bug。

do mAdapter.stopListening();在onPause方法中,它位于顶部,但现在我也尝试使用onPause和相同的issuetry删除所有节点列表我删除了所有我可以删除的内容,但这是FirestoreRecyclerAdapter,最后一个是构造器的必填项谢谢你的回答,但我没有访问此链接的权限。这种泄漏几乎每次我进入活动时都会发生,GC有时会变得非常疯狂。我能做点什么来解决这个问题吗?因为我使用的是
FirestoreRecyclerAdapter
,可能会更多(但不仅仅如此)?