多次收到广播关闭和打开activity
Broadcast received multiple times to close and open activity
我遇到以下问题:
一个片段让我多次收到 broadcastRecivier:
on创建我的片段:
@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;
}
}
}
该片段位于一个 activity 中,其中包含 3 个带滑动标签的片段,没有什么罕见的。
问题如下:
当我输入并触发广播 activity 时,片段会正确接收。
现在,如果我回来,(关闭 activity)并再次打开 activity,该片段会收到两次广播,依此类推...等等
这是怎么回事?
如果您需要更多代码,我可以添加。
谢谢
我遇到了同样的问题并用一个非常简单的方法解决了它 solution.I 只是添加了一个标志值来检查广播是否已经被触发。
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º - 需要在 onDestroy o OnPause 中注销:
getActivity().registerReceiver(receiver, filter);
2º 开播时他这样做了:
LocalBroadcastManager.getInstance(getBaseContext()).sendBroadcast(localIntent);
但是有必要这样做:
getApplicationContext().sendBroadcast(localIntent);
我还是不明白为什么(1 个月前我在 android 编程)
谁能解释一下不胜感激
一声问候
正如评论中所讨论的,问题是您没有在片段的 OnDestroy()
中注销接收器。
关于您注册接收器的上下文,这不是一个简单的答案,但您可以阅读更多详细信息here
在 onPause() 中删除接收器注销后我的问题得到解决
我遇到以下问题: 一个片段让我多次收到 broadcastRecivier:
on创建我的片段:
@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;
}
}
}
该片段位于一个 activity 中,其中包含 3 个带滑动标签的片段,没有什么罕见的。
问题如下: 当我输入并触发广播 activity 时,片段会正确接收。 现在,如果我回来,(关闭 activity)并再次打开 activity,该片段会收到两次广播,依此类推...等等
这是怎么回事? 如果您需要更多代码,我可以添加。
谢谢
我遇到了同样的问题并用一个非常简单的方法解决了它 solution.I 只是添加了一个标志值来检查广播是否已经被触发。
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º - 需要在 onDestroy o OnPause 中注销:
getActivity().registerReceiver(receiver, filter);
2º 开播时他这样做了:
LocalBroadcastManager.getInstance(getBaseContext()).sendBroadcast(localIntent);
但是有必要这样做:
getApplicationContext().sendBroadcast(localIntent);
我还是不明白为什么(1 个月前我在 android 编程)
谁能解释一下不胜感激
一声问候
正如评论中所讨论的,问题是您没有在片段的 OnDestroy()
中注销接收器。
关于您注册接收器的上下文,这不是一个简单的答案,但您可以阅读更多详细信息here
在 onPause() 中删除接收器注销后我的问题得到解决