I see this as well on my Galaxy Nexus with 4.0.4, but only if there's only one option and the chooser doesn't appear.
This is a bug in Android source - not much you can do about it. Their ResolverActivity registers a BroadcastReceiver, but doesn't always unregister it.
More detail:
Intent.createChooser() will start a ResolverActivity. In onCreate(), the activity calls
mPackageMonitor.register(this, false);
mPackageMonitor is a BroadcastReceiver and within register()
it registers itself on the activity. Normally, the receiver is unregistered in onStop()
. However, later in onCreate()
the code checks how many options the user can choose from. If there's only one it calls finish()
. Since finish()
is called in onCreate()
the other lifecycle methods are never called and it jumps straight to onDestroy()
- leaking the receiver.
I didn't see a bug for this in the Android issues database, so I created one.
For more info you can see this in code:
As a side note, Google uses email as an example of when you wouldn't want to use a chooser so you may consider just launching the intent normally. See the javadocs for Intent#ACTION_CHOOSER.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…