针对从后台启动 activity 的限制

Android 10(API 级别 29)及更高版本对应用在后台运行时可以启动 activity 的时间施加了限制。这些限制有助于最大限度地减少对用户造成的干扰,并且可以让用户更好地控制其屏幕上显示的内容。

本指南将介绍通知作为从后台启动 activity 的替代方案。它还列出了限制不适用的具体情况。

改为显示通知

几乎在所有情况下,后台应用都必须显示时效性通知以向用户提供紧急信息,而不是直接启动 activity。此类通知包括处理来电或正在运行的闹钟。

这种基于通知的提醒和提醒系统可为用户提供以下几项优势:

  • 使用设备时,用户会看到一条浮动通知,以便其做出响应。用户可以维护其当前上下文并控制他们在屏幕上看到的内容。
  • 具有时效性的通知遵循用户的“勿扰”规则。例如,在“勿扰”模式下,用户可能会仅允许特定联系人或重复来电者的来电。
  • 当设备屏幕关闭时,全屏 intent 会立即启动。
  • 在设备的设置屏幕中,用户可以查看哪些应用最近发送了通知(包括来自特定通知渠道的通知)。在该屏幕中,用户可以控制其通知偏好设置。

应用何时可以启动 activity

在满足以下一个或多个条件时,在 Android 10 或更高版本上运行的应用可以启动 activity:

  • 应用具有可见窗口,例如前台 activity。
  • 该应用在前台任务的返回堆栈中有 activity。
  • 应用在“最近使用的应用”屏幕上现有任务的返回堆栈中有一个 activity。

  • 应用有一个最近启动的 activity。

  • 应用最近对一个 activity 调用了 finish()。这仅适用于在调用 finish() 时,应用在前台运行的 activity,或在前台任务的返回堆栈中具有 activity。

  • 该应用具有以下某个受系统绑定的服务。 这些服务可能需要启动一个界面。

  • 该应用的一项服务被另一个可见的应用绑定。绑定到该服务的应用必须保持可见,以便后台应用成功启动 activity。

  • 应用会从系统收到通知 PendingIntent。如果是服务和广播接收器的待处理 intent,则应用可以在待处理 intent 发送后启动 activity 几秒钟。

  • 应用会收到来自其他可见应用发送的 PendingIntent

  • 应用收到一条系统广播,在该广播中,应用应启动界面。例如 ACTION_NEW_OUTGOING_CALLSECRET_CODE_ACTION。应用可在广播发送几秒钟后启动 Activity。

  • 应用通过 CompanionDeviceManager API 与配套硬件设备相关联。此 API 可让应用启动 activity 以响应用户在配对设备上执行的操作。

  • 应用是在设备所有者模式下运行的设备政策控制器。示例使用场景包括全托管式企业设备以及数字标牌和自助服务终端等专用设备

  • 应用被用户授予 SYSTEM_ALERT_WINDOW 权限。