Android活动与IntentService的通信
我需要在我的活动和正在运行的IntentService之间进行双向通信 场景是这样的:应用程序可以安排运行时的警报,启动一个IntentService,从web获取一些数据并进行处理。IntentService完成时有三种可能的情况:Android活动与IntentService的通信,android,intentservice,localbroadcastmanager,Android,Intentservice,Localbroadcastmanager,我需要在我的活动和正在运行的IntentService之间进行双向通信 场景是这样的:应用程序可以安排运行时的警报,启动一个IntentService,从web获取一些数据并进行处理。IntentService完成时有三种可能的情况: 应用程序处于焦点,这意味着当IntentService完成时,应用程序需要使用新数据刷新其视图 该应用程序在IntentService完成工作后关闭并打开,因此该应用程序将可以访问已处理的数据 应用程序在IntentService运行时打开,在这种情况下,我需要从
LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent(BROADCAST_SEND_TO_SERVICE));
在职
private LocalBroadcastManager localBroadcastManager;
private BroadcastReceiver broadcastReceiverService = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(BROADCAST_SEND_TO_SERVICE)) {
//does not reach this place
//Send back a broadcast to activity telling that it is working
}
}
};
@Override
protected void onHandleIntent(Intent intent) {
localBroadcastManager = LocalBroadcastManager.getInstance(context);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BROADCAST_SEND_TO_SERVICE);
localBroadcastManager.registerReceiver(broadcastReceiverService, intentFilter);
.... //do things
}
我的实现的问题是,在IntentService中,BroadcastReceive不会在接收时触发。有什么建议或更简单的方式让活动询问IntentService正在做什么吗
乐:
试图得到原子布尔。
在职:
public static AtomicBoolean isRunning = new AtomicBoolean(false);
@Override
protected void onHandleIntent(Intent intent) {
isRunning.set(true);
// do work
// Thread.sleep(30000)
isRunning.set(false);
}
在“活动”中,在服务运行时重新启动应用程序:
Log(MyIntentService.isRunning.get());
//this returns always false, even if the intent service is running
关于AndroidManifest
<service
android:name=".services.MyIntentService"
android:exported="false" />
1。您可以在应用程序级别维护一个标志,该标志将通过意图服务获得true和false。2.您还可以在SharedReferenceswitch中维护从LocalBroadcastManager
到greenrobot的EventBus的值,并使用粘性事件指示当前状态。或者,如果您的需求有限,可以使用一个简单的AtomicBoolean
(或其他一些原子包装器)作为静态
字段。YourIntentService.BROADCAST\u SEND\u TO\u服务和HomeActivity.BROADCAST\u SEND\u TO\u服务字符串是否相等?从您的示例代码来看,您可能在两个类中都定义了这个字符串变量。@JanusVarmarken yes是相同的,我已经编辑了这个问题。@Commonware我想知道为什么LocalBroadcastManger可以从一个服务工作到另一个活动,而不能从另一个角度工作?我需要看看AtomicBoolean,因为我以前从未使用过它