我有以下问题: 一个片段让我多次看到一个broadcastRecivier:
onCreate my fragment:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Filtro de acciones que serán alertadas
IntentFilter filter = new IntentFilter("serv_connected");
filter.addAction("amigos_list");
// Crear un nuevo ResponseReceiver
receiver = new ResponseReceiverFragment();
// Registrar el receiver y su filtro
LocalBroadcastManager.getInstance(getContext()).registerReceiver(
receiver,
filter);
activity = ((SocialActivity) getActivity());
}
这是广播,这是我的片段;
// Broadcast receiver que recibe las emisiones desde los servicios
private class ResponseReceiverFragment extends BroadcastReceiver {
// Sin instancias
private ResponseReceiverFragment() {
}
@Override
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()) {
case "serv_connected":
MyService aux = activity.getmService();
mUserList = MyService.xmpp.getOnlineUsers();
iconloader.hide();
break;
}
}
}
该片段位于包含3个带滑动标签的片段的活动中,并不罕见。
问题如下: 当我进入并触发广播活动时,片段正确接收。 现在,如果我回来,(关闭活动)并再次打开活动,片段接收两次广播,依此类推等等。
发生了什么事? 如果您需要更多代码,我可以添加。
谢谢
答案 0 :(得分:1)
我遇到了同样的问题并且使用了一个非常简单的解决方案。我只是添加了一个标志值来检查广播是否已被触发。
boolean broadcastTriggerd = false;
@Override
public void onReceive(Context context, Intent intent) {
if(!broadcastTriggered){
broadcastTriggerd = true;
switch (intent.getAction()) {
case "serv_connected":
MyService aux = activity.getmService();
mUserList = MyService.xmpp.getOnlineUsers();
iconloader.hide();
break;
}
}
}
答案 1 :(得分:1)
正如评论中所讨论的,问题是您没有取消注册片段OnDestroy()
中的接收者。
关于您注册接收者的上下文,这不是一个简单的答案,但您可以更详细地阅读here
答案 2 :(得分:0)
由于评论我成功解决了问题:
1º - 必须在onDestroy中取消注册o OnPause:
getActivity().registerReceiver(receiver, filter);
2º发布广播时,他这样做了:
LocalBroadcastManager.getInstance(getBaseContext()).sendBroadcast(localIntent);
但有必要这样做:
getApplicationContext().sendBroadcast(localIntent);
仍然我不明白为什么(1个月前我在android中编程)
如果有人能解释它,请欣赏。
问候语
答案 3 :(得分:0)
在onPause()
中删除了接收器取消注册后,我的问题得以解决