LeakCanary を使用していますが、ヒープ分析の結果では、リークを検出するのに十分な情報が得られません。アクティビティがリークしていることだけが言及されています。
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 行以上あり、すべての行を調べてリークの可能性のある候補をチェックする以外にショートカットがあるかどうかを期待していました。