【发布时间】:2020-08-02 04:20:00
【问题描述】:
我遇到了一个似乎只发生在 android 10+ 上的奇怪行为:
当我的活动在后台时,我将打开 Android 设置,转到系统 -> 手势 -> 系统导航 -> 在手势导航和两键导航之间切换。
当我切换这些设置时,我的应用程序(在后台运行)会重新创建我的活动,并且这个新活动会收到对 onStart 的调用,然后紧跟在 onStop 之后。
顺便说一句,此行为在此设置流程中是 100% 可重现的,但也可能在应用处于后台时看似随机发生。
根据我的理解,活动永远不应该在它们仍在后台时被调用到onStart,即使它们因任何原因被操作系统破坏......或者我有错吗?
由于我的应用中使用在onStart 中调用的第三方库的某些功能,当活动实际上在后台时调用onStart 时,此行为会导致严重问题。
有没有其他人经历过这种情况?除了在我的onStart 代码中添加延迟逻辑(如果紧跟onStop 则中止),还有什么方法可以防止这种情况发生吗?
【问题讨论】:
-
嗨,吉尔。您是否在清单中指定了 android.permission.SYSTEM_ALERT_WINDOW ?此外,在:设置 -> 管理应用程序 -> 您的应用程序 -> 高级 -> 其他应用程序警报开启。这是我能想到的唯一一个 Android 10 特定限制,这使得从后台启动 Activity 存在问题。补充一下,如果这是问题,它应该向 logcat 写入一条特殊消息,说明除非应用程序打开,否则 Activity 无权启动。问候
-
@Elletlar 澄清一下,当我的活动的 onStart 被调用时,它实际上根本没有进入前台。该活动一直在后台,这就是为什么这如此令人费解
-
你见过这个吗? Restrictions on starting activities from the background Android 10 - API level 29。在我的一个应用程序中,我使用 SYSTEM_ALERT_WINDOW 解决了它。
-
是的,但我实际上并没有尝试开始我的活动。它已被移至后台,然后操作系统随机重新创建活动并调用 onStart,然后是快速 onStop。发生这种情况时,应用程序不会移动到前台。 AFAIK,不应该在这里调用 onStart .. 这似乎是一个操作系统故障。
-
明确一点,它会在 onStart 之前调用 onCreate 吗?
标签: android android-activity android-10.0