如何防止我的应用在 Android 12 上的 "recent menu" 中 运行

How do I prevent my app from running in the "recent menu" on Android 12

Android 12 介绍了在最近的菜单中您激活的最后一个应用程序继续 运行 的行为。我想知道是否有标志或其他东西可以放入 AndroidManifest 文件中以防止这种行为,因为它与我们应用程序中的某些逻辑冲突(这适用于 Android < 12)。我已经用谷歌搜索了,但很难找到,除非你确切知道这个“功能”叫什么。

步骤:

  1. 启动应用程序
  2. 打开最近的菜单
  3. 观察到您可以进行交互,并且该应用程序仍然 运行ning 就像您拥有它一样 open/active

为什么这是个问题?因为用户现在可以在我们的游戏(使用 Unity)中不进入“暂停”状态的情况下强制退出应用程序(将其滑开),这意味着某些保存逻辑不会 运行。 这可以通过一种或另一种方式解决,但现在我想尽可能在​​最近的菜单中暂停应用程序(我们的应用程序在最近的菜单中处于活动状态的理由为零)。

编辑: 正如@WyattL 在他的回答中提到的那样,android:excludeFromRecents="true" 可能会起作用,但它会导致游戏时间和游戏保留时间的减少,并且希望有一个更合适的解决方案来解决 Android 12 的这个“不必要的”功能.

根据某些 brief research,您是否尝试添加

    <activity>
      ...
      android:excludeFromRecents="true"
      android:label=""
      ...
    </activity>

到AndroidManifest.xml?

如果不对每个 phone 进行测试,我无法确定,因为问题似乎因设备而异(感谢 Ruzihm),但如果打开“最近使用的应用程序”屏幕生成 OnApplicationFocus() 调用,这将提供一个解决方案。

在活动的 MonoBehaviour 中:

private void OnApplicationFocus( bool focus )
{
    if( focus ) {
        UnpauseLogic();
    }
    else {
        PauseLogic();
        SaveLogic();
    }
}

(可能也值得尝试 OnApplicationQuit() 以防在滑动终止期间在特定设备上调用它,但在我自己的测试中它从未被调用过。)