Squ*_*onk 4 android broadcastreceiver
可能重复:
Receiver未注册异常错误?
我有一个TabActivity,每个TabSpec的'内容'是我自己的GuideListActivity类.
有七个选项卡(一周中每天一个),每个GuideListActivity显示一个电视频道的电视指南信息/一周中的一天.
所述TabActivity维持该信道号码的用户正在观看指南的详细信息,并且当用户改变,以查看另一信道的信息,所述TabActivity使用sendStickyBroadcast()与意图识别哪个信道的信息,以显示(具有第一除去可能存在的任何先前的粘广播).
这可行,但我看起来像GuideListActivity的BroadcastReceiver看似随机的问题,这些问题太频繁而无法忽略(即使在'Beta'级代码中).我看到的错误是......
java.lang.RuntimeException: Unable to pause activity {com.mycompany.mypackage/com.mycompany.mypackage.GuideListActivity}: java.lang.IllegalArgumentException: Receiver not registered: com.mycompany.mypackage.GuideListActivity$ChannelChangeListener@462ebe20
Run Code Online (Sandbox Code Playgroud)
每个GuideListActivity都维护着自己的BroadcastReceiver(显然)示例......
public class GuideListActivity extends ListActivity {
private ChannelChangeListener listener = null;
private Intent ChannelChangeListenerIntent = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
listener = new ChannelChangeListener();
}
@Override
protected void onResume(){
super.onResume();
if (ChannelChangeListenerIntent == null)
ChannelChangeListenerIntent = registerReceiver(listener, new IntentFilter(packageName + ".GUIDE_UPDATE"));
}
@Override
protected void onPause() {
super.onPause();
if (ChannelChangeListenerIntent != null)
unregisterReceiver(listener); // <== EXCEPTION THROWN HERE
}
// Nested 'listener' class
public class ChannelChangeListener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Handle intent
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如我所说,这似乎是随机的 - 我可以坚持一个频道并点击1,2或3甚至所有7个标签,然后点击下一个,抛出异常.其他时候它发生在第二次点击.
任何帮助解释这个以及如何解决它将非常感激.
小智 11
设置ChannelChangeListenerIntent为null onPause:
if (ChannelChangeListenerIntent != null) {
unregisterReceiver(listener);
ChannelChangeListenerIntent = null;
}
Run Code Online (Sandbox Code Playgroud)
暂停后可以恢复活动,因此活动可能不会在第二次调用中注册监听器onResume.