簡體   English   中英

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"));

問題是當我關閉活動時,runOnUiThread 中的代碼多次調用

如果我關閉活動並打開它,它會調用 2 次,如果我再次這樣做,它會調用 3 次,依此類推

您的活動暫停后,您需要注銷廣播接收器。 在您活動的onPause()方法中。 LocalBroadcastManager.getInstance(本).unregisterReceiver(米的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只會被調用一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM