Service.startForeground() 不允许,因为从 Activity.onStop 触发时 mAllowStartForeground false

问题描述 投票:0回答:1

根据类似问题进行详尽调查后,我必须尝试针对我的具体案例获取一些意见。

我有一个 Android 应用程序,其中包含一个活动和一个服务。当活动启动时,我通过调用 startService() 来启动服务(作为普通后台服务)。当用户关闭应用程序(因此在 Activity.onStop 中)时,我通过调用带有适当通知的 startForeground 将服务移动到前台服务。通常这工作得很好。但我偶尔会收到

ForegroundServiceStartNotAllowedException
Service.startForeground() not allowed due to mAllowStartForeground false
报告。

我无法在本地重现此内容(无论是调试还是生产)。从崩溃日志来看,这似乎并没有影响所有用户,受影响的用户只是偶尔会看到这一点。

据我所知,我正在遵循正确的步骤来处理此问题,事实证明它在大多数情况下都有效。

我已经尝试过

builder.setForegroundServiceBehavior(Notification.FOREGROUND_SERVICE_IMMEDIATE);
,服务声明为
android:foregroundServiceType="location"

我最好的猜测是,在某些情况下,StartForeground 的调用速度不够快(据我所知,操作系统提供了一个很短的窗口来执行此类切换),但我无法确认这一点。同样在 OnStop 中,我立即调用它,并且通知是预先创建的,所以我不知道如何加快速度?

如有任何帮助,我们将不胜感激!

android android-service foreground-service
1个回答
0
投票

抛出此异常时,您的应用程序已经在后台运行。在您的应用程序进入后台之前,您必须启动前台

Service
。请参阅 致命 Android 12:异常:由于 mAllowStartForeground false 而不允许 startForegroundService() https://developer.android.com/develop/background-work/services/foreground-services#background-start-restrictions

作为解决方法,您可以尝试将

Service

 设置为 
Service
 中的前景 
onPause()
 而不是 
onStop()
,然后将其返回到 
Service
 中的背景 
onResume()
。这可能是解决这个问题的一种方法。

© www.soinside.com 2019 - 2024. All rights reserved.