奇怪"接收未注册"例外 [英] Weird "Receiver not registered" exception
问题描述
在onResume()我做的:
In onResume() I do:
registerReceiver(timeTickReceiver, new IntentFilter(Intent.ACTION_TIME_TICK));
和中的onPause():
and in onPause():
unregisterReceiver(timeTickReceiver);
我看java.lang.IllegalArgumentException:如果接收器未注册,在Android开发者控制台报告(只有2个报告,我的应用程序有成千上万的用户)。唯一的例外是由unregisterReceiver触发()。有什么可以发生?我不觉得很自信,只是围绕着它的try-catch。
I see "java.lang.IllegalArgumentException: Receiver not registered" reports in Android Developer Console (there are only 2 reports and my app has thousands of users). The exception is triggered by unregisterReceiver(). What can be happening? I don't feel very confident to just surround it with try-catch.
推荐答案
在特定屏幕上做,当一个preSS,然后马上做两方向的变化(如打开设备倒挂,我们已经看到了这个错误)。
We've seen this error when doing a long press on a particular screen, and then immediately doing two orientation changes (e.g. turning the device upside down).
API文档的<一个href="http://developer.android.com/reference/android/content/Context.html#unregisterReceiver%28android.content.BroadcastReceiver%29">unregisterReceiver说:
注销pviously注册的BroadcastReceiver一个$ P $。
Unregister a previously registered BroadcastReceiver.
它并没有明确说,但正如你所看到的,你打抛出:IllegalArgumentException:接收未注册
如果尚未注册
It doesn't say explicitly, but as you've seen, you hit IllegalArgumentException: Receiver not registered
if it isn't already registered.
我正在使用的解决方法是保存我的接收机作为成员字段,并将其设置为空时,它没有被注册,即我初始化为null,然后只设置它,当我注册。这可能不是完美的,但它确实解决了我崩溃!
The workaround I'm using is to store my Receiver as a member field, and have it set to null whenever it is not registered, i.e. I initialize it to null, and then only set it when I register it. This might not be perfect, but it does solve my crashes!
private Receiver mReceiver = null;
这是我onServiceConnected:
From my onServiceConnected:
sLog.debug("Registering receiver");
mReceiver = new Receiver();
registerReceiver(mReceiver, filter);
这是我onServiceDisconnected:
From my onServiceDisconnected:
if (mReceiver == null)
{
sLog.info("Do not unregister receiver as it was never registered");
}
else
{
sLog.debug("Unregister receiver");
unregisterReceiver(mReceiver);
mReceiver = null;
}
这篇关于奇怪&QUOT;接收未注册&QUOT;例外的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!