簡體   English   中英

從IntentService發送廣播接收器到Fragment(活動)

[英]Sending Broadcast Receiver from IntentService to Fragment (Activity)

將廣播接收器從IntentService發送到Fragment(活動)時出現問題。

我有兩種類型的過程的應用程序: 在此處輸入圖片說明

第一個進程具有MainActivity和MainFragment。 在這個片段中,我這樣實現:

private void registerStickerReload() {
    mStickerReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(DataFetcherService.ACTION_RELOAD_STICKER)) {
                // Some code here
            }
        }
    };
    IntentFilter intentFilter = new IntentFilter(
            DataFetcherService.ACTION_RELOAD_STICKER);
    mLocalBroadcastManager.registerReceiver(mStickerReceiver, intentFilter);
}

和:

private void unregisterStickerReload() {
    if (mLocalBroadcastManager != null) {
        mLocalBroadcastManager.unregisterReceiver(mStickerReceiver);
    }
}

我從onStart()注冊接收者,並從onStop()注銷。 在第二個過程中,我運行IntentService之類的DataFetcherService類。 在此處輸入圖片說明

我的代碼在這里:

private class BasicLoader extends AsyncTask<Request, Void, Response> {
    public BasicLoader() {
    }

    @Override
    protected Response doInBackground(Request... params) {
        Request request = params[0];
        Response response = request.execute();
        Handler handler = new Handler(Looper.getMainLooper());
        handler.post(new Runnable() {
            @Override
            public void run() {
                Intent intent = new Intent(ACTION_RELOAD_STICKER);
                LocalBroadcastManager.getInstance(getApplicationContext())
                        .sendBroadcast(intent);
            }
        });
        return response;
    }

    @Override
    protected void onPostExecute(Response result) {
        super.onPostExecute(result);
    }
}

我進行了調試,LocalBroadcastManager發送了Broadcast,但是它對onReceive(Context,Intent)沒有任何操作。

這是我嘗試過的一些情況:

  • 刪除處理程序。

  • 刪除Looper.getMainLooper()。

  • 刪除unregisterStickerReload()。

但這不起作用。

如您所見, LocalBroadcastManager類概述:

在流程中注冊意圖廣播並將其發送到本地對象的助手。

由於DataFetcherService服務在與datafetcher分開的進程中運行,而活動MainFragment在不同的進程中運行。這就是為什么從doInBackground方法發送廣播時未調用onReceive方法的原因。

要在不同進程或應用程序之間接收和發送廣播,請使用BroadcastReceiver

暫無
暫無

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

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