2012-05-14 30 views
2

我有一個維護與遊戲服務器的套接字連接的服務。遊戲需要經常與服務器進行雙向通信,所以只要應用程序具有前景,該連接應該保持打開狀態。但是,由於保持連接打開是電池密集型的,我們希望儘可能好,並且一旦應用程序離開前臺(即用戶返回主屏幕),我們將終止連接。在應用程序具有前景時保持Android服務存活

這都是非常接近的工作,但我們遇到了一對夫婦的小刺激。每當遊戲改變活動的時候(比如喜好活動),連接就會下降。現在我們可以讓每個活動都放棄連接onPause並啓動負責此事的服務,但這看起來不夠理想,因爲它會導致不必要的丟棄和重新連接。將服務停止綁定到onStop方法似乎還不夠理想,因爲連接將在用戶離開遊戲很長時間後保持活動狀態。

我們正在尋找的是啓動在不久後進行初始活動開始一些點服務,並保持該服務,只要應用程序在前臺運行的方式。並且只要用戶離開應用程序就關閉服務。

回答

1

如果你只需要它來運行,而應用程序是在前臺(即,顯示它的活動之一),你並不真正需要的服務。使您的連接管理器類成爲單例,並按照此處所述計算正在使用它的活動的數量:https://groups.google.com/forum/#!msg/android-developers/yxOzuMGlcSo/yd-pkau0zzAJ

當您需要在沒有UI的情況下運行時,使用Android中的服務,因此不太適合您的用例。

+0

這是一個很好的觀點。但是,據我所知,它似乎仍不能解決我所遇到的問題。連接管理器需要根據哪些活動正在偵聽來啓動和關閉。第一個活動的onPause似乎在新活動的onResume之前被調用。這會導致每個交換機上的連接丟失。 – John

+0

沒錯。 'onStop()'當活動不再可見時應該被調用,即另一個已經在前臺,所以它應該工作。最後一次客戶端斷開連接後,您也可以延遲連接幾秒鐘。 –

相關問題