Android 意图间工作的意图服务

Android 意图间工作的意图服务,android,android-activity,service,communication,intentservice,Android,Android Activity,Service,Communication,Intentservice,我不知道这是否可行,但我想做下一步: 想象一个有两个活动的应用程序:MenuActivity和OtherPurposeActivity 因此,在Menu的onCreate方法上,我运行了该服务。在相同的活动(菜单)中,我可以轻松地“连接”(编辑:通信)此服务,没有问题 然后,我单击MenuActivity上唯一的按钮,它启动OtherPurposeActivity。问题来了: 如何连接到在MenuActivity上运行的服务?可能吗?(我没有打电话给stopService) 提前谢谢 编辑:代码

我不知道这是否可行,但我想做下一步:

想象一个有两个活动的应用程序:MenuActivity和OtherPurposeActivity

因此,在Menu的onCreate方法上,我运行了该服务。在相同的活动(菜单)中,我可以轻松地“连接”(编辑:通信)此服务,没有问题

然后,我单击MenuActivity上唯一的按钮,它启动OtherPurposeActivity。问题来了:

如何连接到在MenuActivity上运行的服务?可能吗?(我没有打电话给stopService)

提前谢谢

编辑:代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_menu);

    /* Execute service */
    Log.d("SERVICE", "Launching service");
    Intent msgIntent = new Intent(MenuActivity.this, ServerProcessingService.class);
    msgIntent.setAction(ServerProcessingService.ACTION_STATUS);
    startService(msgIntent);


    /* Connection to the IntentService */
    IntentFilter filter = new IntentFilter();
    filter.addAction(ServerProcessingService.ACTION_STATUS);
    //filter.addAction(ServerProcessingService.ACTION_CONTROL);
    rcv = new ProgressReceiver();
    registerReceiver(rcv, filter);

}
所以我可以处理与ProgressReceiver类的通信。但是,如果我打开另一个活动,而此服务仍在运行,该怎么办?我可以使用它吗

如何连接到在MenuActivity上运行的服务

另一个希望与服务通信的活动可以使用与MenuActivity完全相同的方法
startService()
仅在服务尚未运行时才会启动该服务,然后在所有情况下将意图发送到
onStartCommand()
,因此可以从多个活动调用start service

正如一位评论者所指出的,如果您的活动需要与服务进行持续的通信,那么您应该绑定到它

可能吗?(我没有打电话给stopService)


如果一个
IntentService
没有工作要做,它会自动停止,所以你没有明确停止它并不重要。如果服务需要继续运行,请不要使用意向服务。

为了与您保持一致,我将简要介绍我如何理解您的困境

您有一个执行某些操作的
IntentService
,该操作将在最后提供一些结果。您将在一个活动中启动此流程(当然是异步的),并立即切换到另一个活动。现在,在切换到第二个
活动之前,您不确定服务是否会完成工作,结果将丢失

基本上,使用
BroadcastReceiver
是一个不错的选择,但如果您不及时注册,数据将丢失,服务将结束工作。您可以让服务在结果结束之前将其存储在DB、文件甚至内存中(取决于数据类型)。当您的第二个活动开始时,您可以检查是否有数据等待您,如果没有,您可以等待
BroadcastReceiver
发送数据


您还可以使用比
BroadcastReceiver
更高级的解决方案库。它允许向注册的观察者(
活动
)返回最后的结果,更重要的是,它将允许您的服务检查是否有任何观察者收到该消息。如果没有,则只能存储最后一个结果。

连接是什么意思?请输入密码。无需输入密码。我可以
startService(myService)
并与扩展
BroadcastReceiver
的内部类通信该服务。当我说“连接”时,我的意思是:通信。无论如何,我会把代码放进去。你的意思是使用第一个活动设置的一些变量访问同一个服务实例吗?基本上,只有一个特定类型的服务在运行。您不应该在这里使用BroadcasrReceiver,为什么不绑定到您的服务?