After testing this it's different people, it's clear that we could improve text LeakTraces.
Note: the comments reflects different things we've tried, but this issue description has been updated to reflect the latest.
In com.example.leakcanary:1.0:1.
* com.example.leakcanary.MainActivity has leaked:
* Toast$TN.mNextView
* โณ LinearLayout.mContext
* โณ MainActivity.!(httpRequestHelper)!
* โณ HttpRequestHelper.!(button)!
* โณ Button.mContext
* โณ MainActivity
โ, โ , โ . However, the meaning isn't clear. Also, the โ tends to draw more attention (when in fact โ and โ are equally important, and they're just metadata)MainActivity leaked due to one of the fields highlighted with ~~~
โฌ
โโ android.widget.Toast$TN
โ Leaking: NO (LinearLayoutโ is not leaking)
โ Leaking: NO (it's a GC root)
โ โ Toast$TN.mNextView
โ
โโ android.widget.LinearLayout
โ Leaking: NO (View#mAttachInfo is not null)
โ Leaking: NO (MainActivityโ is leaking)
โ View is attached (View#mAttachInfo is not null)
โ View id is R.id.container_layout
โ โ LinearLayout.mContext
โ
โโ com.example.MainActivity
โ Leaking: NO (Activity#mDestroyed is false)
โ โ MainActivity.httpRequestHelper
โ ~~~~~~~~~~~~~~~~~
โ
โ
โโ com.example.HttpRequestHelper
โ Leaking: UNKNOWN
โ โ HttpRequestHelper.button
โ ~~~~~~
โ
โโ android.widget.Button
โ Leaking: YES (View#mAttachInfo is null)
โ View id is R.id.charge_button
โ โ Button.mContext
โ
โฐโ com.example.MainActivity
Leaking: YES (Activity#mDestroyed is true)
Leaking: YES (RefWatcher was watching this)
In com.example.leakcanary:1.0:1.
MainActivity@718013552 is leaking, see โญ?โโฏ for the potential causes:
โฌ
โฐโ Toast$TN (Alive: it's a GC root)
Toast$TN.mNextView โโฎ
โญโโโโโโโโโโโโโโโโโโโโโโโฏ
โฐโ LinearLayout@1935364696 (Alive: View#mAttachInfo is not null)
LinearLayout.mContextโโฎ
โญโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โฐโ MainActivity@718262384 (Alive: Activity#mDestroyed is not true)
MainActivity.httpRequestHelper โโฎ
โญ?โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โฐโ HttpRequestHelper@1867963480
HttpRequestHelper.button โโฎ
โญ?โโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โฐโ Button@718299264 (Not alive: View#mAttachInfo is null)
Button.mContext โโฎ
โญโโโโโโโโโโโโโโโโโโโโฏ
โฐโ MainActivity@718013552 (Not alive: Activity#mDestroyed is true)

Some more iteration: backward and inlining:
In com.example.leakcanary:1.0:1.
MainActivity@718013552 is leaking, see โฐ?โโฎ for the potential causes:
โญโ MainActivity@718013552 not alive: Activity#mDestroyed is true
โฐโโโโโโโโโโโโโโโโโโโโฎ
โญโ Button.mContext โโฏ Button@718299264 not alive: View#mAttachInfo is null
โฐ?โโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โญโ HttpRequestHelper.button โโฏ HttpRequestHelper@1867963480
โฐ?โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โญโ MainActivity.httpRequestHelper โโฏ MainActivity@718262384 alive: Activity#mDestroyed is not true
โฐโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โญโ LinearLayout.mContextโโฏ LinearLayout@1935364696 alive: View#mAttachInfo is not null
โฐโโโโโโโโโโโโโโโโโโโโโโฎ
โญโToast$TN.mNextView โโฏ Toast$TN alive: it's a GC root
โด

In com.example.leakcanary:1.0:1.
MainActivity@718013552 is leaking, see โฐ?โโฏ for the potential causes:
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โญโ MainActivity โ MainActivity@718013552, not alive: Activity#mDestroyed is true โ
โ โ โ
โโ Button.mContext โ Button@718013552, not alive: View#mAttachInfo is null โ
โ โ โ
โโ HttpRequestHelper.button โ HttpRequestHelper@1867963480 โ
โ โฐ?โโโโฏ โ โ
โโ MainActivity.httpRequestHelper โ MainActivity@718262384, alive: Activity#mDestroyed is not true โ
โ โฐ?โโโโโโโโโโโโโโโฏ โ โ
โโ LinearLayout.mContext โ LinearLayout@1935364696, alive: View#mAttachInfo is not null โ
โ โ โ
โโ Toast$TN.mNextView โ Toast$TN, alive: LinearLayout@1935364696 is alive โ
โด โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ

In com.example.leakcanary:1.0:1.
@6 MainActivity is leaking, see โญ?โโฎ for the potential causes:
โญโ @6 MainActivity
โ
โโ @5 Button.mContext
โ โญ?โโโโฎ
โโ @4 HttpRequestHelper.button
โ โญ?โโโโโโโโโโโโโโโฎ
โโ @3 MainActivity.httpRequestHelper
โ
โโ @2 LinearLayout.mContext
โ
โโ @1 Toast$TN.mNextView
โด
โญโ @6 MainActivity leaking: Activity#mDestroyed is true
โโ @5 Button leaking: View#mAttachInfo is null
โโ @4 HttpRequestHelper
โโ @3 MainActivity alive: Activity#mDestroyed is not true
โโ @2 LinearLayout alive: View#mAttachInfo is not null
โโ @1 Toast$TN alive: @2 LinearLayout is alive
โด

In com.example.leakcanary:1.0:1.
MainActivityยน is leaking, see โญ?โโฎ for the potential causes:
โญโ MainActivityยน
โ MainActivity leaking: Activity#mDestroyed is true
โโ Button.mContext
โ Button leaking: View#mAttachInfo is null
โ โญ?โโโโฎ
โโ HttpRequestHelper.button
โ โญ?โโโโโโโโโโโโโโโฎ
โโ MainActivityยฒ.httpRequestHelper
โ MainActivity not leaking: Activity#mDestroyed is not true
โโ LinearLayoutยน.mContext
โ LinearLayout not leaking: View#mAttachInfo is not null
โโ Toast$TN.mNextView
โ Toast$TN not leaking: LinearLayoutยน is not leaking
โด

In com.example.leakcanary:1.0:1.
MainActivityยน is leaking, see ? for the potential causes:
โญโ MainActivityยน
โ MainActivity leaking: Activity#mDestroyed is true
โโ Button.mContext
โ Button leaking: View#mAttachInfo is null
โ? โญโโโโโฎ
โโ HttpRequestHelper.button
โ? โญโโโโโโโโโโโโโโโโฎ
โโ MainActivityยฒ.httpRequestHelper
โ MainActivity not leaking: Activity#mDestroyed is not true
โโ LinearLayoutยน.mContext
โ LinearLayout not leaking: View#mAttachInfo is not null
โโ Toast$TN.mNextView
โ Toast$TN not leaking: LinearLayoutยน is not leaking
โด

@pyricau thanks for the change! This is super helpful for troubleshooting memory leaks, do you have a plan for a new release with this feature?
Yes. The plan is that I'll work on this when I have time, and I'll make a release when I'm done working on it :) .
This shipped in 2.0 alpha 1
Most helpful comment
Yes. The plan is that I'll work on this when I have time, and I'll make a release when I'm done working on it :) .