当我将IntentService的广播接收器发送到Fragment(Activity)时出现问题。
我有一个应用程序有两种类型的进程:
第一个进程有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发送了广播,但它没有对onReceive(Context,Intent)执行任何操作。
以下是我尝试的一些案例:
删除处理程序。
删除Looper.getMainLooper()。
删除unregisterStickerReload()。
但它不起作用。
答案 0 :(得分:2)
正如您所见LocalBroadcastManager课程概述:
帮助注册并向本地对象发送Intent广播 在你的过程中。
因为DataFetcherService
服务在与datafetcher
不同的进程中运行,并且活动MainFragment
正在不同的进程中运行。这就是为什么在从{发送广播时未调用onReceive方法的原因{1}}方法。
要在不同流程或应用程序之间接收和发送广播,请使用BroadcastReceiver