IntentService在intent之间工作



我不知道这是否可能,但我想做下一个:

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

因此,在菜单的onCreate方法上,我已经运行了服务。在同一个活动(菜单)中,我可以很容易地"连接"(编辑:通信)与此服务没有问题。

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

我如何连接到我在菜单活动上运行的服务?这可能吗?(我没有调用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完全相同的方法。startService()只会在服务尚未运行的情况下启动服务,然后在所有情况下将意图发送给onStartCommand(),因此从多个活动调用start service是正确的。

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

有可能吗?(我没有调用stopService)。

一个IntentService将停止自己,如果它没有工作要做,所以它没有关系,你没有明确地停止它。如果服务需要继续运行,就不要使用intent服务。

为了保持一致,我将简要描述一下我是如何理解你的困境的。

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

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

您也可以使用Otto库,这是比BroadcastReceiver先进得多的解决方案。它允许将最后的结果返回给注册的观察者(Activity),更重要的是,它将允许您的服务检查是否有观察者接收到消息。如果没有,则只能存储最后的结果

相关内容

  • 没有找到相关文章

最新更新