欢迎参加我们将于 6 月 3 日举行的 #Android11:Beta 版发布会

从后台启动 Activity 的限制

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

本指南将通知作为从后台启动 Activity 的备选方案进行说明。随后,本指南将列举不适用于此类限制的个别情况。

改为显示通知

几乎在所有情况下,后台应用都应显示有时效性的通知,以便向用户提供紧急信息,而非直接启动 Activity。此类通知的适用情形包括处理来电或正在响铃的闹钟。

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

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

限制的例外情况

在 Android 10 或更高版本上运行的应用只有在满足以下一项或多项条件时,才能启动 Activity:

  • 应用具有可见窗口,例如前台 Activity。
  • 应用在前台任务的返回栈中拥有 Activity。
  • 应用在 Recents 屏幕上现有任务的返回栈中拥有 Activity。

  • 应用的某个 Activity 刚在不久前启动。

  • 应用最近为某个 Activity 调用了 finish()。这仅适用于在调用 finish() 时,应用在前台或前台任务的返回栈中拥有 Activity 的情况。

  • 应用具有受系统约束的服务。此情况仅适用于以下服务,这些服务可能需要启动界面:AccessibilityServiceAutofillServiceCallRedirectionServiceHostApduServiceInCallServiceTileServiceVoiceInteractionServiceVrListenerService

  • 应用中的某个服务受另一个可见应用约束。请注意,绑定到服务的应用必须保持可见,以便后台应用成功启动 Activity。

  • 应用收到系统的 PendingIntent 通知。对于服务和广播接收器的挂起 Intent,应用可在该挂起 Intent 发送几秒钟后启动 Activity。

  • 应用收到另一个可见应用发送的 PendingIntent

  • 应用收到它应该在其中启动界面的系统广播。示例包括 ACTION_NEW_OUTGOING_CALLSECRET_CODE_ACTION。应用可在广播发送几秒钟后启动 Activity。

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

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

  • 用户已向应用授予 SYSTEM_ALERT_WINDOW 权限。