1 package leakcanary 2 3 import android.app.Activity 4 import android.app.Application 5 import leakcanary.internal.friendly.noOpDelegate 6 7 /** 8 * Expects activities to become weakly reachable soon after they receive the [Activity.onDestroy] 9 * callback. 10 */ 11 class ActivityWatcher( 12 private val application: Application, 13 private val reachabilityWatcher: ReachabilityWatcher 14 ) : InstallableWatcher { 15 16 private val lifecycleCallbacks = 17 object : Application.ActivityLifecycleCallbacks by noOpDelegate() { onActivityDestroyednull18 override fun onActivityDestroyed(activity: Activity) { 19 reachabilityWatcher.expectWeaklyReachable( 20 activity, "${activity::class.java.name} received Activity#onDestroy() callback" 21 ) 22 } 23 } 24 installnull25 override fun install() { 26 application.registerActivityLifecycleCallbacks(lifecycleCallbacks) 27 } 28 uninstallnull29 override fun uninstall() { 30 application.unregisterActivityLifecycleCallbacks(lifecycleCallbacks) 31 } 32 } 33