2010-11-02 28 views
1

我正在制作一个应用程序,该应用程序具有与单个服务进行通信并用于启动,停止或更改该服务设置的活动。我使用了来自this提示的单例方法。如何等待活动开始时的服务

我的问题是忙等待不适合我,我无法将监听器附加到服务,因为活动被阻止。我希望服务在应用程序启动时启动或获取它的当前实例,所以我将忙等待放在onCreate中。我猜我正在做这个错误,所以我该如何做到这一点?

此外,如果有更好的方法来此,请售后的任何环节或导游,因为我是getn困惑在Android开发者网站:P

的感谢!

回答

2

我从这个技巧中使用了单例方法。

不要那样做。改为使用bindService()和本地绑定模式,并在服务准备就绪时通知您。您还可以访问服务发布的API,并在绑定后开始使用它。

+0

bindService听起来不错,但据我所知,只有在Activity关闭之后,服务才会保持活跃状态​​。我需要服务保持活跃状态​​,并在下次活动开始时重新连接。 – danizmax 2010-11-02 13:20:54

+0

@danizmax:如果需要,您可以同时使用'startService()'和'bindService()'。确保你有一个很好的理由让活动结束后继续提供服务,但是 - 如果用户没有预料到这种行为,就会导致市场上的一星评级。您也可以尝试使用更多的命令模式来操作您的服务,从服务操作中解耦您的活动。 – CommonsWare 2010-11-02 16:55:49

+0

该服务是主要功能,它将从互联网获取数据并每隔几分钟处理一次,取决于设置。 – danizmax 2010-11-02 20:02:26

1

问题是程序与事件驱动编程之一,android的UI建立在后者之上。

onCreate是一个事件。服务连接的通知也是一个事件。直到您从onCreate返回后,您才会收到服务连接通知(即使发生这种情况)。

您可以将您的活动启动分为两部分,第一部分是在onCreate中完成的,第二部分是为了响应服务连接?

+0

这实际上是我的计划A,但是当我没有实例时,如何从服务中获取通知?通过BroadcastReceiver?我有一种感觉,它并不意味着被用于这个目的。 – danizmax 2010-11-02 13:17:02

+0

从您的服务连接的onServiceConnected()方法中获取实例句柄,您稍后将使用它来调用该服务的RPC。 – 2010-11-02 13:32:51