fhu*_*cho 24 android broadcastreceiver
在onResume()我做:
registerReceiver(timeTickReceiver, new IntentFilter(Intent.ACTION_TIME_TICK));
Run Code Online (Sandbox Code Playgroud)
并在onPause()中:
unregisterReceiver(timeTickReceiver);
Run Code Online (Sandbox Code Playgroud)
我在Android Developer Console中看到"java.lang.IllegalArgumentException:Receiver not registered"报告(只有2个报告,我的应用程序有数千个用户).异常由unregisterReceiver()触发.可能发生什么?用try-catch围绕它我感觉不自信.
Dan*_*n J 21
我们在特定屏幕上长按,然后立即进行两次方向更改(例如,将设备颠倒)时看到此错误.
unregisterReceiver的API文档说:
取消注册以前注册的BroadcastReceiver.
它没有明确说明,但正如你所见,IllegalArgumentException: Receiver not registered如果它尚未注册,你就会命中.
我正在使用的解决方法是将我的Receiver存储为成员字段,并在未注册时将其设置为null,即将其初始化为null,然后仅在我注册时设置它.这可能不完美,但它确实解决了我的崩溃!
private Receiver mReceiver = null;
Run Code Online (Sandbox Code Playgroud)
从我的onServiceConnected:
sLog.debug("Registering receiver");
mReceiver = new Receiver();
registerReceiver(mReceiver, filter);
Run Code Online (Sandbox Code Playgroud)
从我的onServiceDisconnected:
if (mReceiver == null)
{
sLog.info("Do not unregister receiver as it was never registered");
}
else
{
sLog.debug("Unregister receiver");
unregisterReceiver(mReceiver);
mReceiver = null;
}
Run Code Online (Sandbox Code Playgroud)
小智 6
广播接收器应该在onPause()生命周期方法中取消注册
protected void onPause() {
this.unregisterReceiver(reciever);
super.onPause();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19570 次 |
| 最近记录: |