多次收到广播关闭和打开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() 中删除接收器注销后我的问题得到解决