2010-03-13 44 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

相關問題