【问题标题】:Android 11 (API level 30) onTaskRemoved fired in Foreground service when app go to background当应用程序进入后台时,Android 11(API 级别 30)onTaskRemoved 在前台服务中触发
【发布时间】:2021-01-10 09:35:30
【问题描述】:

我尝试测试我在 android 11 上使用的应用程序(在 Pixel 3 XL 上得到它)。当应用程序进入后台时,我收到奇怪的行为: onTaskRemoved 在 Foreground 服务上触发,看起来像应用程序被杀死并重新启动。

前台服务信息: 在清单中:

<service
    android:name=".MyFS"
    android:foregroundServiceType="mediaProjection"
    android:enabled="true"
    android:exported="false"/>

在 FS 类 onStartCommand -> return START_STICKY;

附加信息:应用程序使用“相机”和“麦克风”,我尝试将这两个添加到 android:foregroundServiceType="mediaProjection|camera|microphone" 但没有帮助。

同样有趣的是 onTaskRemoved 仅在该应用程序第一次进入后台时触发,如果我返回应用程序并第二次单击“主页”onTaskRemoved 未调用。

请帮助我理解它是从哪里来的。谢谢

PS: 有关系吗? 在 onTaskRemoved 之前,我可以在完整的 logcat 中看到:

2020-10-05 09:33:19.866 1463-1524/? D/EventSequenceValidator: onIntentFailed during UNKNOWN.
    java.lang.Throwable: EventSequenceValidator#getStackTrace
        at com.google.android.startop.iorap.EventSequenceValidator.logWarningWithStackTrace(EventSequenceValidator.java:260)
        at com.google.android.startop.iorap.EventSequenceValidator.onIntentFailed(EventSequenceValidator.java:130)
        at com.android.server.wm.LaunchObserverRegistryImpl.handleOnIntentFailed(LaunchObserverRegistryImpl.java:147)
        at com.android.server.wm.LaunchObserverRegistryImpl.lambda$KukKmVpn5W_1xSV6Dnp8wW2H2Ks(Unknown Source:0)
        at com.android.server.wm.-$$Lambda$LaunchObserverRegistryImpl$KukKmVpn5W_1xSV6Dnp8wW2H2Ks.accept(Unknown Source:2)
        at com.android.internal.util.function.pooled.PooledLambdaImpl.doInvoke(PooledLambdaImpl.java:264)
        at com.android.internal.util.function.pooled.PooledLambdaImpl.invoke(PooledLambdaImpl.java:201)
        at com.android.internal.util.function.pooled.OmniFunction.run(OmniFunction.java:97)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.os.HandlerThread.run(HandlerThread.java:67)
        at com.android.server.ServiceThread.run(ServiceThread.java:44)
2020-10-05 09:33:19.866 1463-1524/? D/EventSequenceValidator: dec AccIntentStartedEvents to 2
2020-10-05 09:33:19.870 27662-27662/: t:main onTaskRemoved here.

【问题讨论】:

  • 是否正在使用多个活动?它们使用了哪些 launchMode 值?
  • 不,模式=singleInstance 的单个“主”活动
  • 我正在经历这个issue too on a Pixel 4XL - Android 11 对我来说它略有不同。当我启动应用程序并按主页时,它按预期工作,该服务不会触发 onTaskRemoved,但如果我在应用程序中打开另一个活动然后启动主页,则更有可能触发它。我没有使用相机或记录权限,但确实使用了位置。如果我打开另一个应用程序然后按主页,它甚至会发生。
  • @behelit 你能在你的 logcat EventSequenceValidator 警告中看到吗?
  • 您找到解决方案了吗?我也有类似的问题。

标签: android android-service android-api-levels android-11


【解决方案1】:

对我来说,将活动启动模式从singleInstance 更改为解决了问题,并且不再调用onTaskRemoved。 我在清单中使用singleInstance 声明了 2 个活动。将它们更改为singleTop 后,问题就消失了。

改变

        android:launchMode="singleInstance"

        android:launchMode="singleTop"

或完全删除它

很明显,使用 singleInstance 是有正当理由的,这仍然是出乎意料的行为,但目前它是一种有效的解决方法。

【讨论】:

  • 是的。它也适用于我。这不是我想要的,但在一段时间内它会有所帮助。
  • android:launchMode="singleTask" 也适用于我。奇怪的是,如果我有一些活动没有开始但“singleInstance”它仍然调用 onTaskRemoved
猜你喜欢
  • 2021-01-19
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多