[英]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.