Android 的背景任務(background tasks)分類

Carter Chen
Feb 26, 2023

--

在 Android 開發日常中,我們經常會接觸到許多背景任務(background tasks),例如打 API、在指定的時間發送通知或是更新資料等等。

而說到要處理背景任務,現在和以前相比,已經有很大的不同了。我們在今天有很多選項可以來實現背景任務,例如 Thread、Kotlin Coroutines、RxJava、Handler、Service、WorkManager、AlarmManager 等等等的,但這些工具每一個都有它最合適的使用場合(與不合適的場合),為了避免大家產生選擇障礙,官方也很貼心的提供攻略,幫助大家可以根據使用場景去做出最合適的選擇。

背景任務的分類

基本上背景任務大概被分為幾類:

  1. 即時任務(Immediate)
  2. 長時間運行任務(Long Running)
  3. 延後執行任務(Deferrable)
  4. 精確時間執行任務(Time-exact / Alarms)

你想要持久嗎?

Work is persistent when it remains scheduled through app restarts and system reboots.

背景任務又會依據是否為持久化(Persistent)而被分為:

  1. 持久化任務(Persistent Work):在 App 的 process 被 kill 掉後,或是重新開機後仍需要執行
  2. 非持久化任務(Impersistent Work):在 App 的 process 被 kill 掉或是重新開機後就啥都沒了

做出對的選擇

在什麼場景下採用哪個工具是最好的呢?其實答案並沒有想像中的難,我們今天就直接來對答案吧~

  • 如果是即時 + 非持久化任務,推薦使用 Coroutines(或是 RxJava、Handler、Thread)
  • 如果是需要在精確時間點執行的任務,推薦使用 AlarmManager,但必須注意 AlarmManager 在重新開機後就會失效。
  • 剩下的場合(長時間運行任務、延後執行任務),WorkManager 基本上全包了,WorkManager 提供了強大的 API support,交給 WorkManager 會是一個很好的選擇。

--

--

No responses yet