【问题标题】:Android Activity onStart called while app is in the background?应用程序在后台时调用Android Activity onStart?
【发布时间】: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


【解决方案1】:

onStart() 将在后台调用应用程序。没有任何东西说 Android 不会这样做。您唯一可以真正依赖的是onResume()onPause()onResume()Activity 位于前台并拥有用户焦点时被调用。 onPause()Activity 拥有用户的焦点并且Android 将用户的焦点提供给另一个Activity 时调用。

看起来,在您的情况下,Android 导致配置更改传播到所有应用程序,这可能就是您看到后台应用程序被这样“唤醒”的原因,但这只是我的猜测。

【讨论】:

  • 谢谢你,有道理!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多