android BroadcastReceiver 调用了两次

android BroadcastReceiver called twice

我正在做聊天项目

我在这里做的是连接人员的服务,我设置了一个广播接收器来从服务中获取数据

这是接收者代码

mMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            try {
                final String code = intent.getExtras().get("code").toString();
                final JSONObject Message = new JSONObject(intent.getExtras().get("msg").toString());
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Log.d("test","test");
                    }
                });
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    };

    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,new IntentFilter("data"));

问题是当我关闭 activity runOnUiThread 中的代码调用了不止一次

如果我关闭 activity 并打开它调用了 2 次如果我再次打开它调用了 3 次等等

您需要在 activity 暂停后注销广播接收器。在 activity 的 onPause() 方法中。 LocalBroadcastManager.getInstance(this).unregisterReceiver(m‌ MessageReceiver)

LocalBroadcastManager的正确使用方法如下:

 public static String REPORTBOOK_BROADCAST = "REPORTBOOK_BROADCAST";

    @Override
    protected void onResume() {
        super.onResume();
        recreateLists();
        LocalBroadcastManager.getInstance(mContext).registerReceiver(reportBookReceiver, new IntentFilter(REPORTBOOK_BROADCAST));
    }

    @Override
    protected void onPause() {
        super.onPause();
        LocalBroadcastManager.getInstance(mContext).unregisterReceiver(reportBookReceiver);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        LocalBroadcastManager.getInstance(mContext).unregisterReceiver(reportBookReceiver);
    }

这样LocalBroadcastManager只会被调用一次