gpt4 book ai didi

android - 从共享菜单中泄漏 IntentReceiver

转载 作者:行者123 更新时间:2023-11-29 14:01:28 27 4
gpt4 key购买 nike

我在特定 Activity 中通过单击按钮打开发送菜单:

Intent i = new Intent(Intent.ACTION_SEND);
i.setType("text/plain");
i.putExtra(Intent.EXTRA_TEXT, "meh");
try {
startActivity(Intent.createChooser(i, "pfft"));
} ...

工作正常,但是当点击“返回”关闭它时,logcat 说

Activity com.android.internal.app.ChooserActivity 泄露了最初在这里注册的 IntentReceiver com.android.internal.app.ResolverActivity$1@405ab288。您是否错过了对 unregisterReceiver() 的调用?

没有其他事情发生 - 应用程序继续正常运行。

搜索表明上面的代码显然已经注册了一个 BroadcaseReceiver 并且需要取消注册(通过 unregisterReceiver),可能在 onResume(或 onPause)期间。 unregister receiver 的签名表示单个参数应该是 BroadcastReceiver 实例(有意义)。

我的问题是 - BroadcastReceiver 的引用在哪里? AFAICT 用于打开菜单的方法不返回 BroadcastReceiver - 我如何找到并引用适当的方法来注销它?

蒂亚

(应该注意,我正在三星 Galaxy SII 上进行调试,this thread 表明它可能是设备特定的错误?)

最佳答案

显然这是 Android 中某些设备的错误。查看此报告:http://code.google.com/p/android/issues/detail?id=29399 .看起来这只是一个问题,当您使用选择器并且只有一个选项可供选择时。

If you call Intent.createChooser(), it will leak a BroadcastReceiver if there's only possible option.

Based on the current source, the problem appears to be that ResolverActivity is registering the receiver in onCreate(), but then calling finish() if there's only one option. This causes the code to skip onStop(), which is where the receiver is unregistered.

关于android - 从共享菜单中泄漏 IntentReceiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9318095/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com