2015-05-04 27 views
0

Android服務可能會在任何可能的時間被操作系統殺死。沒有保證的生命週期調用,例如您可以信賴的onDestroy()。我必須實現一個服務,在後臺執行很多長時間運行的任務和一堆文件操作。所以我的問題是:Android服務中的文件操作

  • 在任何一種服務中這樣做通常是一個好主意嗎?當進程被終止時,打開的文件句柄會發生什麼?
  • 有沒有一種使用前臺服務來達到這個目的的首選方法?

我想我不會是第一個有這類問題/問題的人,但我在Google或SO上找不到任何東西。提前致謝。

回答

1

Android服務可能會在任何可能的時間被操作系統殺死。

更準確地說,Android應用程序進程可能會在任何時候被操作系統殺死。

沒有像onDestroy()這樣可靠的生命週期調用。

正確。 onDestroy()很可能會被調用,但不能保證。

我必須實現一個服務,在後臺執行很多長時間運行的任務和一堆文件操作。

幾乎任何大於「你好,世界」的軟件都適合該描述。

在任何一種服務中這樣做通常是一個好主意嗎?

你沒有太多選擇。從UI的角度來看,服務就是幫助您保持流程不再處於前臺的狀態。如果您不使用服務,您的流程生命週期可能會在幾分鐘內,也許會更少。使用服務,您的流程生命週期可能需要數小時,但它依賴於設備(如系統RAM的數量)和用戶(例如,用戶多忙以及有多少其他應用程序想要做後臺工作)。

當進程被終止時,打開的文件句柄會發生什麼?

如果您已經嘗試在進程終止時將文件寫入文件,那麼尚未交給操作系統的任何字節(例如,用Java緩存)將不在文件中。

有沒有達到這個

我不知道「這」是首選的方式。

像使用前臺服務?

有利用前景的服務三種主要模式:

  • 短暫事務。例如,K9 Mail在檢查新消息時似乎使用前臺服務,但僅在該短窗口中進行。

  • 用戶控制的操作。這是前臺服務的常規用例。例如,音樂播放器通常會爲音樂播放實施前臺服務。

  • 「我將嘗試永生」的服務類型。這不是特別實用,因爲前臺服務不會永遠活着。用戶還會對前臺服務感到惱火,因爲他們不明白他們獲得的是系統RAM/CPU消耗和始終可見的通知圖標的權衡。

這些模式是否適合您的項目是您需要自行確定的。