我正在制作一个应用程序,该应用程序具有与单个服务进行通信并用于启动,停止或更改该服务设置的活动。我使用了来自this提示的单例方法。如何等待活动开始时的服务
我的问题是忙等待不适合我,我无法将监听器附加到服务,因为活动被阻止。我希望服务在应用程序启动时启动或获取它的当前实例,所以我将忙等待放在onCreate中。我猜我正在做这个错误,所以我该如何做到这一点?
此外,如果有更好的方法来此,请售后的任何环节或导游,因为我是getn困惑在Android开发者网站:P
的感谢!
我正在制作一个应用程序,该应用程序具有与单个服务进行通信并用于启动,停止或更改该服务设置的活动。我使用了来自this提示的单例方法。如何等待活动开始时的服务
我的问题是忙等待不适合我,我无法将监听器附加到服务,因为活动被阻止。我希望服务在应用程序启动时启动或获取它的当前实例,所以我将忙等待放在onCreate中。我猜我正在做这个错误,所以我该如何做到这一点?
此外,如果有更好的方法来此,请售后的任何环节或导游,因为我是getn困惑在Android开发者网站:P
的感谢!
我从这个技巧中使用了单例方法。
不要那样做。改为使用bindService()
和本地绑定模式,并在服务准备就绪时通知您。您还可以访问服务发布的API,并在绑定后开始使用它。
问题是程序与事件驱动编程之一,android的UI建立在后者之上。
onCreate是一个事件。服务连接的通知也是一个事件。直到您从onCreate返回后,您才会收到服务连接通知(即使发生这种情况)。
您可以将您的活动启动分为两部分,第一部分是在onCreate中完成的,第二部分是为了响应服务连接?
这实际上是我的计划A,但是当我没有实例时,如何从服务中获取通知?通过BroadcastReceiver?我有一种感觉,它并不意味着被用于这个目的。 – danizmax 2010-11-02 13:17:02
从您的服务连接的onServiceConnected()方法中获取实例句柄,您稍后将使用它来调用该服务的RPC。 – 2010-11-02 13:32:51
bindService听起来不错,但据我所知,只有在Activity关闭之后,服务才会保持活跃状态。我需要服务保持活跃状态,并在下次活动开始时重新连接。 – danizmax 2010-11-02 13:20:54
@danizmax:如果需要,您可以同时使用'startService()'和'bindService()'。确保你有一个很好的理由让活动结束后继续提供服务,但是 - 如果用户没有预料到这种行为,就会导致市场上的一星评级。您也可以尝试使用更多的命令模式来操作您的服务,从服务操作中解耦您的活动。 – CommonsWare 2010-11-02 16:55:49
该服务是主要功能,它将从互联网获取数据并每隔几分钟处理一次,取决于设置。 – danizmax 2010-11-02 20:02:26