我有一個Android應用程序,其中的活動激發在後臺運行的長時間運行的操作。這些操作在完成後與活動進行交互。我正在開發一個處理Activity/Long-Running-Task耦合的組件,負責處理被破壞和重新創建的活動。長時間運行Android'服務'
此時該組件是作爲Android服務實現的。這些活動調用bindService並使用生成的IBinder來啓動和跟蹤任務。我決定不使用startService,因爲我更喜歡通過Java接口實現更豐富的API。
現在的問題。活動啓動時,綁定到服務並調用serviceApi.runTask(...)。然後銷燬活動A(例如用戶翻轉手機)並重新創建爲活動A'。一個'然後再次綁定到服務,宣佈其存在,一切都應該運行良好。
除了我的服務被破壞。當活動A被銷燬時,它解除與服務的綁定。 Android看到沒有更多的客戶,並殺死該服務。當活動A'被創建時,服務被再次創建,並且我失去了舊服務所具有的一切。
我能看到的唯一解決方案是使用單例服務。然後它不一定是一個Android服務,只是一個每個人都可以訪問的實例。 Android在這個問題上皺起了眉頭嗎?有沒有更適合這個問題的設計?
Editted:即使我打電話startService,然後綁定到它,沒有什麼保證了服務實例會只要在應用程序運行存在。如果資源不足,Android可以殺死粘性服務。殺死服務會導致應用程序發生故障,而我不能這樣做。
謝謝,Commonware。組件(缺少更好的單詞)我只需要在應用程序啓動並運行時運行,並且用戶正在使用它。一旦用戶關閉應用程序,該組件也可以關閉,因爲其唯一目的是協調過程中異步UI相關的任務。 我確實需要定期檢查服務器更新的服務(我還沒有決定使用C2DM)。我將把它作爲一個短期的服務來實現,在投票後關閉。 – zmbq