• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download

<lambda>null1 package shark
2 
3 object AndroidServices {
4   val HeapGraph.aliveAndroidServiceObjectIds: List<Long>
5     get() {
6       return context.getOrPut(AndroidServices::class.java.name) {
7         val activityThreadClass = findClassByName("android.app.ActivityThread")!!
8         val currentActivityThread = activityThreadClass
9           .readStaticField("sCurrentActivityThread")!!
10           .valueAsInstance!!
11 
12         val mServices = currentActivityThread["android.app.ActivityThread", "mServices"]!!
13           .valueAsInstance!!
14 
15         val servicesArray = mServices["android.util.ArrayMap", "mArray"]!!.valueAsObjectArray!!
16 
17         servicesArray.readElements()
18           .filterIndexed { index, heapValue ->
19             // ArrayMap<IBinder, Service>
20             // even: key, odd: value
21             index % 2 == 1
22               && heapValue.isNonNullReference
23           }
24           .map { it.asNonNullObjectId!! }
25           .toList()
26       }
27     }
28 }