diff --git a/shark-android/api/shark-android.api b/shark-android/api/shark-android.api index 206d9d9997..b10f1f5bba 100644 --- a/shark-android/api/shark-android.api +++ b/shark-android/api/shark-android.api @@ -47,6 +47,7 @@ public abstract class shark/AndroidObjectInspectors : java/lang/Enum, shark/Obje public static final field OBJECT_ANIMATOR Lshark/AndroidObjectInspectors; public static final field RECOMPOSER Lshark/AndroidObjectInspectors; public static final field SERVICE Lshark/AndroidObjectInspectors; + public static final field STUB Lshark/AndroidObjectInspectors; public static final field SUPPORT_FRAGMENT Lshark/AndroidObjectInspectors; public static final field TOAST Lshark/AndroidObjectInspectors; public static final field VIEW Lshark/AndroidObjectInspectors; diff --git a/shark-android/src/main/java/shark/AndroidObjectInspectors.kt b/shark-android/src/main/java/shark/AndroidObjectInspectors.kt index 3171ef18d2..ea7471f4b9 100644 --- a/shark-android/src/main/java/shark/AndroidObjectInspectors.kt +++ b/shark-android/src/main/java/shark/AndroidObjectInspectors.kt @@ -870,6 +870,19 @@ enum class AndroidObjectInspectors : ObjectInspector { return state["java.lang.Enum", "name"]!!.value.readAsJavaString()!! } }, + + STUB { + override fun inspect(reporter: ObjectReporter) { + reporter.whenInstanceOf("android.os.Binder") { instance -> + labels + "${instance.instanceClassSimpleName} is a binder stub. Binder stubs will often be" + + " retained long after the associated activity or service is destroyed, as by design stubs" + + " are retained until the other side gets GCed. If ${instance.instanceClassSimpleName} is" + + " not a *static* inner class then that's most likely the root cause of this leak. Make" + + " it static. If ${instance.instanceClassSimpleName} is an Android Framework class, file" + + " a ticket here: https://issuetracker.google.com/issues/new?component=192705" + } + } + }, ; internal open val leakingObjectFilter: ((heapObject: HeapObject) -> Boolean)? = null