4

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

有关前台服务的信息:在清单中:

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

在 FS 类 onStartCommand -> 返回 START_STICKY;

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

同样有趣的是 onTaskRemoved 仅在该应用程序第一次进入后台时触发,如果我返回应用程序并第二次单击“home” 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.
4

1 回答 1

3

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

改变

        android:launchMode="singleInstance"

        android:launchMode="singleTop"

或完全删除它

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

于 2020-10-07T01:08:21.307 回答