将广播接收器从 IntentService 发送到 Fragment (Activity)
Sending Broadcast Receiver from IntentService to Fragment (Activity)
当我从 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() 注销。
从第二个进程开始,我运行 DataFetcherService class喜欢IntentService。
我的代码在这里:
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()。
但是没用。
如您所见LocalBroadcastManager class 概述:
Helper to register for and send broadcasts of Intents to local objects
within your process.
因为 DataFetcherService
服务 运行 在与 datafetcher
不同的进程中,而 activity MainFragment
在不同的 process.that 中是 运行 ] 这就是为什么从 doInBackground
方法发送广播时不调用 onReceive 方法的原因。
要在不同进程或应用程序之间接收和发送广播,请使用 BroadcastReceiver
当我从 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() 注销。
从第二个进程开始,我运行 DataFetcherService class喜欢IntentService。
我的代码在这里:
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()。
但是没用。
如您所见LocalBroadcastManager class 概述:
Helper to register for and send broadcasts of Intents to local objects within your process.
因为 DataFetcherService
服务 运行 在与 datafetcher
不同的进程中,而 activity MainFragment
在不同的 process.that 中是 运行 ] 这就是为什么从 doInBackground
方法发送广播时不调用 onReceive 方法的原因。
要在不同进程或应用程序之间接收和发送广播,请使用 BroadcastReceiver