2010-03-13 57 views
3

有没有一种方法可以测试我的应用程序中是否还有其他活动还活着?我正在寻找停止onDestroy方法中的服务,但只希望这样做,如果没有其他活动从我的应用程序仍然活着在堆栈上。如何在我的应用程序中没有其他活动正在运行时才停止Android服务?

我有呼叫停止主要活动的onDestroy()方法中的服务。这是完美的,除非用户启动我的应用程序,然后在我的应用程序中启动一些活动,然后点击主屏幕并RELAUNCHES我的应用程序,它们将颠覆我的订单,主要活动现在将超出我的应用程序的其他活动。在这种状态下,如果他们点击后退按钮并退出主屏幕,他们将触发onDestroy()方法并终止服务,即使在堆栈上打开了其他活动。我想通过停止服务来避免这种情况,只要我确信我的堆栈上没有其他活动。可能?

+0

这比我第一次想到的更复杂。我意识到我在onDestroy()方法中有条件停止服务的想法并不好,因为那样就不会有任何呼叫来停止服务。因此,我们需要留下一个基本问题:只要应用程序的任何活动仍处于堆栈中,如何才能启动一个服务,该服务将继续运行,但在没有任何应用程序仍处于停止状态时会停止运行? – JohnRock 2010-03-14 00:10:49

回答

16

我怎么能推出一项服务,将 继续只要我的任何 应用程序的活动仍然是 堆栈上运行,但是当没有 仍然被停止?

请勿使用startService()stopService()。相反,即使您不需要绑定连接,也可以使用bindService()unbindService()。绑定/解除绑定是引用计数。如果您拨bindService()BIND_AUTO_CREATE标志,第一个bindService()呼叫将开始您的服务。然后,当所有bindService()通话都与unbindService()通话匹配时,Android会自动关闭您的服务。

+0

谢谢你。你是否在说我的应用程序中的每一个动作都需要调用bindService()以保持活动?而且,每个活动都应该在其销毁方法中调用unbindservice?服务如何将数据推送到活动绑定活动? – JohnRock 2010-03-14 03:09:11

+0

“您是否在说我的应用程序中的每个操作都需要调用bindService()以保持它的活性?”假设你打算说“每个活动”,那么我不知道。你是负责记录什么活动的人,哪些人不记得。 “而且,每个活动都应该在其销毁方法中调用unbindservice?”每项绑定到服务的活动都必须从服务中解除绑定。 “服务如何将数据推送到活动绑定活动?”你今天也是这样做的。 – CommonsWare 2010-03-14 11:26:15

+3

每个活动,你希望服务启动/保持运行,需要在'onStart()'和'onStop()'''''unbindService()''过程中调用'bindService()'。另请参阅:http://stackoverflow.com/questions/2304086/binding-to-service-in-oncreate-or-in-onresume/2304794#2304794 您的服务将数据绑定到绑定活动的方式与就好像你使用了'startService()':你将注册一个服务回调。 – 2010-03-14 12:38:05

相关问题