How is Activity leak detected at run-time in Android?
===

From time to time, I can see logcat messages reporting activity leak. For example:


    Activity com.android.internal.app.ChooserActivity has leaked IntentReceiver com.android.internal.app.ResolverActivity$1@4144d6e8 that was originally registered here. Are you missing a call to unregisterReceiver()?
    
    android.app.IntentReceiverLeaked: Activity com.android.internal.app.ChooserActivity has leaked IntentReceiver com.android.internal.app.ResolverActivity$1@4144d6e8 that was originally registered here. Are you missing a call to unregisterReceiver()?
	     at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:763)
	     at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:567)
	     at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1081)
	     at android.app.ContextImpl.registerReceiver(ContextImpl.java:1068)
	     at android.app.ContextImpl.registerReceiver(ContextImpl.java:1062)
	     at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:341)
	     at com.android.internal.content.PackageMonitor.register(PackageMonitor.java:65)
	     at com.android.internal.app.ResolverActivity.onCreate(ResolverActivity.java:99)
	     at com.android.internal.app.ChooserActivity.onCreate(ChooserActivity.java:53)
	     at android.app.Activity.performCreate(Activity.java:4465)
	     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
	     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2033)
	     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
	     at android.app.ActivityThread.access$600(ActivityThread.java:132)
	     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1157)
	     at android.os.Handler.dispatchMessage(Handler.java:99)
	     at android.os.Looper.loop(Looper.java:137)
	     at android.app.ActivityThread.main(ActivityThread.java:4575)
	     at java.lang.reflect.Method.invokeNative(Native Method)
	     at java.lang.reflect.Method.invoke(Method.java:511)
	     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
	     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
	     at dalvik.system.NativeStart.main(Native Method)

My question is: how is this activity leak detected?