奇怪"接收未注册"例外 [英] Weird "Receiver not registered" exception

查看:185
本文介绍了奇怪"接收未注册"例外的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆