2011-08-03 23 views
5

我正在製作一款Android應用程序,該應用程序將有兩項服務,每隔24小時不斷髮送有關用戶使用電話的數據。Android服務:生命週期考慮因素

用戶應該執行該應用程序,切換按鈕以啓用對手機使用情況的日誌記錄,然後用戶應能夠使用手機正常生活,直到他再次啓動應用程序並禁用切換按鈕來停止信息的記錄。

  • 我應該考慮服務的生命週期?
  • 當服務應該發送數據時,用戶與電話的交互情況如何?

所有的信息都非常感謝,因爲我的思想越來越有點不知所措!

非常感謝大家!

回答

8

可以通過設置菜單隨時切斷服務。如果它確定它需要當前正在運行的活動的資源,它也可以在任何時候被Android終止。 onDestroy()將被調用,無論如何使用它來存儲所需的任何東西。

該服務在後臺運行,但通過主UI線程運行。因此,可以通過服務阻止電話的操作。它看起來像是手機被鎖起來,當它真的是一個試圖做某事的服務。任何阻塞過程都應該在諸如Java定時器,Java線程或AsyncTask之類的線程中使用。

在任何給定時間只能有一個運行版本的服務。但是,如果「myService」已經運行,則調用startService(myService)將基本上覆蓋當前正在運行的服務,並且將再次調用onStartCommand()。然而,無論調用多少次startService(myService),都需要調用stopService(myService)來停止它。

stopService(myService)如果服務綁定任何東西,則不會停止服務。它將等到所有綁定在服務停止前被移除。

+0

非常感謝! 但是,例如:假設用戶啓用了日誌記錄,然後殺死應用程序(關閉它或僅讓它失去焦點並被Android殺死)。 如何在應用程序再次啓動時獲取服務的狀態(無論是否運行),並基於此將按鈕的狀態設置爲活動或非活動狀態? – noloman

+1

我自己從來沒有這樣做過。這似乎已經在這裏討論過了。 http://stackoverflow.com/questions/600207/android-check-if-a-service-is-running。只需在onStartCommand()方法中將持久化狀態翻轉爲「啓用」,並在onDestroy()方法中將其禁用。然後,您可以在打開應用程序時檢查它。 – DeeV

+0

完美,這就是我需要的!非常感謝=) – noloman