資料移轉背景工作選項

Many apps need to transfer data in the background. This guide outlines choices for reliable background data transfer, and provides examples for how to implement them.

常見的背景資料傳輸情境

本節說明應用程式需要從裝置傳送或接收資料的常見情況,並協助您選擇適合情況的工具。

在選擇 API 時,請考量以下問題:

  • 是否由使用者啟動轉移作業?
  • 是否有現有的 API 可處理這項轉移作業?
  • 工作是否需要立即執行?
選項 使用時機 時間 範例

WorkManager

如要排定執行時間少於 10 分鐘的工作,且應在應用程式未顯示時執行。

可延後:也可根據限制條件調整

立即執行:如果工作需要立即執行,請使用 setExpedited

定期將資料與伺服器同步

在網路上下載或上傳媒體 由背景程序啟動 (非使用者)

使用者啟動的資料移轉作業

當資料轉移作業由使用者觸發時,您需要持續向使用者告知轉移進度。

由使用者啟動 (例如按下按鈕) - 立即開始

上傳相片、下載檔案

前景服務

如需執行短時間內必須完成的重要工作,或是無法使用 WorkManager 的情況。通知會向使用者告知轉移作業的進度。

立即開始

connectedDevice:與已連結裝置同步處理資料

shortService:檔案處理時間不到 3 分鐘

mediaProcessing:編碼或解碼媒體檔案

特定 API

如果該特定作業有一個,請使用該作業。可帶來效能最佳化和系統整合等好處。

不定

與已連結裝置同步處理資料

如果您的情境不在常見情境下列出,請參閱下列各節,找出最適合您用途的 API。WorkManager 很可能就很適合。

使用使用者啟動的資料移轉工作類型

如果應用程式需要將資料移轉至遠端伺服器,建議您使用由使用者啟動的資料移轉工作。在下列情況下,這類工作類型最適合:

  • 使用者開始資料移轉
  • 您必須持續通知使用者資料移轉進度
  • 如果系統中斷轉移作業,會對使用者體驗造成不利影響

如果不符合上述任一條件,請改用 WorkManager

舉例來說,媒體應用程式可能會讓使用者下載專輯並在本機播放。如果使用者想下載播放清單並立即播放,建議您使用使用者啟動的資料轉移工作類型。另一方面,如果使用者希望下載的播放清單在背景定期更新,而無須使用者啟動,則 WorkManager 會是較佳的選擇。

如需進一步瞭解如何建立及執行使用者啟動的資料移轉工作,請參閱使用者啟動的資料移轉工作相關說明文件。

使用 WorkManager 進行資料移轉

在大多數情況下,如果您需要安排工作,WorkManager 是最佳選擇。請注意,您必須以可讓系統中斷或延遲的工作方式設計工作。詳情請參閱 WorkManager 說明文件

使用 WorkManager 進行背景資料移轉時,請留意下列事項:

  • 如果您需要盡快執行工作,可以排定加速工作要求。如果您要排定工作,以回應廣播、精確鬧鐘或高優先順序 FCM 訊息,這個選項就特別實用。
  • 如果您需要定期執行工作,可以排定定期工作。定期工作要求可讓您指定大致的工作執行頻率,但不保證特定時間。這樣一來,系統就能排程不同應用程式的工作要求,以平衡裝置上的需求。
  • 您應定義工作限制條件,以指定執行工作的正確情況。舉例來說,如果應用程式需要下載非緊急資源,您可以指定在裝置充電且連上非計量付費網路時執行工作。接著,WorkManager 就能在平衡系統負載的時間執行您的工作。
  • WorkManager 可視需要取消及重試工作。舉例來說,使用者可能會在工作執行期間關閉裝置;系統會在裝置再次可用時重試該工作。請務必設計及測試工作流程,確保取消和重試週期運作正常。
  • 長時間執行 (前景服務) worker:WorkManager 可為應用程式建立前景服務,支援執行時間超過 10 分鐘的工作。這表示該 worker 會受到前景服務和工作的相同限制,包括從背景啟動和執行限制的限制 (系統會重新安排執行時間超過 10 分鐘的工作)。

JobScheduler 是排定背景工作的另一個選項。與 WorkManager 相比,它需要您進行更多設定,但優點是您可以存取 WorkManager 目前無法使用的 API,例如 setPrefetchsetUserInitiatedgetPendingJobReasons

使用特定 API

如果有可用的特定 API (例如隨附裝置管理工具),請使用該 API;否則,請使用 connectedDevice 前景服務

找出特定用途的 API

這個提示會要求您提供資料傳輸作業的特定 API。


I want to transfer data from an Android mobile device to [device_type]. Is there a specific API available?

使用 AI 提示

AI 提示適用於 Android Studio 中的 Gemini (必須使用最新的 Canary 版本)

如要進一步瞭解 Studio 中的 Gemini,請前往以下網址:https://developer.android.com/studio/preview/gemini

使用更具體的前景服務類型

如果 WorkManager 和 JobScheduler 不適合特定背景工作,您可能需要使用前景服務。

如往常一樣,如果您考慮使用前景服務,請考量是否有更適合您用途的其他 API

使用短服務前景服務

如果應用程式需要執行短暫且重要的工作,shortService 前景服務可能是最佳選項。以下列舉幾種適合使用shortService前景服務的情況:

  • 使用者會啟動動作 (例如將資料同步至伺服器),您希望確保即使使用者立即將應用程式傳送至背景,作業也能順利完成。
  • 將記憶體內資訊儲存至持久性儲存空間。
  • 加密或解密資訊。

如需完整資訊,請參閱 shortService 說明文件

使用已連結裝置的前景服務

如果您需要將資料轉移至其他本機裝置,建議您使用 connectedDevice 前景服務。以下列舉幾種可能需要執行此操作的常見情況:

  • 與藍牙配件 (例如耳機或智慧手錶) 通訊
  • 透過 USB 連線、NFC 或本機網際網路連線,將資料傳輸至本機連結的裝置

不過,在這些情況下,您可以使用隨附裝置管理員與裝置連線,而非使用前景服務。如往常,如果您的用途適用於專用 API,通常會比使用前景服務更適合。

使用新的媒體處理前景服務

如果您需要處理媒體資料,可以使用 mediaProcessing 前景服務。如果應用程式指定 Android 15 以上版本,即可使用這類服務。舉例來說,如果應用程式需要將媒體從一種格式轉碼為另一種格式以便播放,就適合使用這種類型的服務。詳情請參閱媒體處理前景服務說明文件

其他資源