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