My occurrence may have nothing to do with your experience, but it did have to do with capturing user input from an EditText widget in a DialogFragment and sending it to the calling Fragment with a Callback. Leakcanary gave me the following message:
====================================
HEAP ANALYSIS RESULT
====================================
1 APPLICATION LEAKS
References underlined with "~~~" are likely causes.
Learn more at https://squ.re/leaks.
99628 bytes retained by leaking objects
Signature: d189c386cd77f5b37c0a05eb1a290629edee
┬───
│ GC Root: System class
│
├─ com.example.jbiss.petminder.dialogs.DurationDialogFragment class
│ Leaking: NO (a class is never leaking)
│ ↓ static DurationDialogFragment.mCallback
│ ~~~~~~~~~
╰→ com.example.jbiss.petminder.fragments.ScheduleAppointmentFragment instance
Leaking: YES (ObjectWatcher was watching this because
com.example.jbiss.petminder.fragments.ScheduleAppointmentFragment received
Fragment#onDestroy() callback and Fragment#mFragmentManager is null)
key = 820c4d81-c97f-412b-be14-4cc17f883313
watchDurationMillis = 5169
retainedDurationMillis = 168
key = 2b74e5f3-c55c-4797-9d7a-dd2bca477a53
It turns out that it was due to me declaring mCallback as static. When I deleted "static" from the declaration, then I'd get this message for one of the other DialogFragment's mCallback. Well, I figured it out and deleted "static" from all of those mCallback declarations and no more leak, at least from that. I don't know why I did that, but I did and leakcanary found it for me and saved me grief going forward.