Android 泄漏金丝雀没有提供足够的信息来识别泄漏
我使用的是LeakCanary,但是堆分析结果没有提供足够的信息来检测任何泄漏。它只提到活动正在泄漏Android 泄漏金丝雀没有提供足够的信息来识别泄漏,android,android-activity,memory-leaks,memory-profiling,java-memory-leaks,Android,Android Activity,Memory Leaks,Memory Profiling,Java Memory Leaks,我使用的是LeakCanary,但是堆分析结果没有提供足够的信息来检测任何泄漏。它只提到活动正在泄漏 D/LeakCanary: ==================================== HEAP ANALYSIS RESULT ==================================== 1 APPLICATION LEAKS References underlined with "~~~"
D/LeakCanary:
====================================
HEAP ANALYSIS RESULT
====================================
1 APPLICATION LEAKS
References underlined with "~~~" are likely causes.
Learn more at https://squ.re/leaks.
298153 bytes retained by leaking objects
Signature: a610bac3ef989ac5dc5a69244fc2882de5617
┬───
│ GC Root: System class
│
├─ android.provider.FontsContract class
│ Leaking: NO (MyApplication↓ is not leaking and a class is never leaking)
│ ↓ static FontsContract.sContext
├─ com.example.MyApplication instance
│ Leaking: NO (Application is a singleton)
│ mBoundService instance of com.example.services.SessionService
│ mBase instance of android.app.ContextImpl
│ ↓ Application.mLoadedApk
│ ~~~~~~~~~~
├─ android.app.LoadedApk instance
│ Leaking: UNKNOWN
│ Retaining 302.8 kB in 4641 objects
│ mApplication instance of com.example.MyApplication
│ ↓ LoadedApk.mReceivers
│ ~~~~~~~~~~
├─ android.util.ArrayMap instance
│ Leaking: UNKNOWN
│ Retaining 301.7 kB in 4615 objects
│ ↓ ArrayMap.mArray
│ ~~~~~~
├─ java.lang.Object[] array
│ Leaking: UNKNOWN
│ Retaining 301.7 kB in 4613 objects
│ ↓ Object[].[2]
│ ~~~
╰→ com.example.activities.SelectActivity instance
Leaking: YES (ObjectWatcher was watching this because com.example.activities.SelectActivity received
Activity#onDestroy() callback and Activity#mDestroyed is true)
Retaining 298.2 kB in 4579 objects
key = 68660c30-bc17-4a74-a5e2-c54f6d676c59
watchDurationMillis = 5185
retainedDurationMillis = 183
mApplication instance of com.example.MyApplication
mBase instance of androidx.appcompat.view.ContextThemeWrapper
====================================
0 LIBRARY LEAKS
我从这个跟踪中只知道
SelectActivity
正在泄漏。但我不明白为什么?活动本身有1000多行,我希望除了浏览每一行并检查可能的泄漏候选之外,还有什么捷径。活动是否注册了任何广播接收器?leaktrace显示LoadedAppk.mreceiver,它是接收器到接收器调度程序的一个数组映射,活动是接收器调度程序。否,它现在不使用任何接收器。之前它使用了一个位置侦听器,但我完全删除了它,它仍然在某处泄漏:(你确实是对的。有一个基本活动两次注册了一个接收器并导致了这次泄漏。谢谢!Thx!你能在上提交一个问题吗?我会检查我是否可以重新编程,如果是,看看如果其他人遇到错误,我是否可以使错误更加明显。也可以随意验证答案:)更新:我在这里注册了:哦,很抱歉我错过了你的最后一条消息。但是谢谢你的注册。为了添加更多信息,注册者在onResume
和onActivityResult
中注册了,在onPause
中注销了。这都是在基本活动中,这就是我为什么一开始就错过了这个。尝试更改find,其中此
(作为上下文)已在活动中使用并检查多线程行。我建议重构它,并尝试使用ViewModel和其他模式来减少代码的活动行。否则,我希望上帝能帮助我:Dhaha。我已经尝试了几天。除了适配器和异步任务之外,我已经从活动中删除了几乎所有内容,而那些没有对活动的任何引用。但它仍然在泄漏。有没有其他方法可以更好地跟踪泄漏?上面的跟踪毫无帮助。