從背景啟動活動的限制

Android 10 (API 級別 29) 以上版本限制應用程式可啟動的時間限制 活動 背景工作。這些限制有助於盡量減少使用者造成的干擾, 可讓使用者進一步掌控畫面上顯示的內容

本指南將顯示通知,做為從下列來源開始活動的替代選項: 背景工作。並列出不受限制影響的具體情況 或

改為顯示通知

幾乎所有情況下,在背景執行的應用程式都必須 顯示有時效性的通知 提供緊急資訊給使用者,而不是直接啟動活動。 這類通知包括處理來電或執行中的鬧鐘 時鐘。

這項通知式快訊和提醒系統具有以下優點: 使用者:

  • 使用裝置時,系統會顯示抬頭通知,提醒使用者 回應。使用者會保留目前的內容,並能掌控 自己的內容。
  • 具時效性的通知會遵循使用者的 零打擾規則。適用對象 舉例來說,使用者可能只允許來自特定聯絡人或重複來電 來電者。
  • 裝置螢幕關閉時,會啟動全螢幕意圖 立即生效
  • 使用者可以在裝置的「設定」畫面中查看哪些應用程式具備 最近傳送的通知,包括來自特定通知管道的通知。 在這個畫面中,使用者可以控管自己的通知偏好設定。

應用程式可啟動活動的時機

在 Android 10 以上版本中執行的應用程式可在以下情況啟動活動: 符合下列一或多項條件:

  • 應用程式有可見視窗,例如在前景的活動。
  • 應用程式具有一項活動 返回堆疊 前景任務
  • 應用程式位於現有工作的返回堆疊中 最近的畫面

  • 應用程式有最近才開始的活動。

  • 以下裝置名為 finish() 的應用程式: 最近一個活動這僅適用於 前景中的活動,或 呼叫 finish() 時發生的前景工作。

  • 應用程式具有下列其中一項受到系統繫結的服務。這些 服務可能需要啟動 UI

  • 應用程式有與其他可見應用程式繫結的服務。應用程式 應用程式必須持續在背景顯示繫結狀態,才能 成功啟動活動。

  • 應用程式收到通知 從系統送出 PendingIntent。於 如果是服務和廣播接收器的待處理意圖 則在待處理意圖傳送後的幾秒鐘內就能啟動活動。

  • 應用程式收到從另一個可見的 PendingIntent 傳來的 應用程式。

  • 應用程式會收到系統廣播訊息,預期應用程式會在廣播訊息中啟動 第一種是使用無代碼解決方案 AutoML 透過使用者介面建立機器學習模型例如 ACTION_NEW_OUTGOING_CALLSECRET_CODE_ACTION. 應用程式可以在廣播訊息傳送後的幾秒鐘內啟動活動。

  • 應用程式透過以下方式與隨附硬體裝置建立關聯: CompanionDeviceManager 也能使用 Google Cloud CLI 或 Compute Engine API這個 API 可讓應用程式啟動活動,以回應 使用者在配對的裝置上執行。

  • 應用程式是會在以下位置執行的裝置政策控制器裝置擁有者模式。用途範例包括 全代管企業裝置 以及數位等專用裝置 或資訊站

  • 應用程式已取得使用者 SYSTEM_ALERT_WINDOW 權限。

透過 PendingIntent 啟動活動時必須選擇採用

為了避免發生意外活動,系統將根據 條件,從 Android 14 開始提供明確的 API 選擇是否要在「活動」開始時授予應用程式權限。

指定 Android 15 以上版本的應用程式將預設為不再默示 授予 PendingIntents 背景活動啟動 (BAL) 權限 建立。以下為需要明確選擇採用的選項 視應用程式傳送或建立 PendingIntents 而定。

待處理意圖表格
圖 1:啟動背景活動的決策流程。

PendingIntent 的寄件者

如果應用程式指定 Android 14 以上版本為目標,且想啟動「PendingIntent」,就必須這麼做

  • 符合所列條件,「並且」
  • 選擇允許根據這些例外狀況啟動背景活動

「只有」在應用程式開發人員知道應用程式的情況下, 系統就會開始一項活動

如要選擇加入,應用程式應透過以下項目傳遞 ActivityOptions 組合: setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) 呼叫 PendingIntent.send() 或類似方法。

PendingIntent 的建立者

如果應用程式指定 Android 15 以上版本並建立 PendingIntent,現在必須 如果有需要的話,請明確選擇允許啟動背景活動 可在所列條件下啟動 PendingIntents

在大多數情況下,啟動 PendingIntent 的應用程式應為選擇加入的應用程式。 不過,如果建立應用程式需要授予下列權限:

  • 您隨時可以在建立應用程式的顯示位置啟動 PendingIntent
  • 如果建立的應用程式具有特殊特性,您隨時可以啟動 PendingIntent 權限。

如要選擇加入,應用程式應透過以下項目傳遞 ActivityOptions 組合: 將 setPendingIntentCreatorBackgroundActivityStartMode (ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) 設為 PendingIntent.getActivity() 或類似方法。

詳情請參閱相關參考說明文件: