我读过我应该打电话给
startForegroundService(intent)
如果我想正确启动可以作为前台服务运行的服务。但是,如果我希望它在不作为前台服务而又有可能在将来成为前台服务的情况下启动,我应该怎么想呢?关于我们现在如何拥有的一些信息:
我们有一个应用程序,该服务使用服务执行许多任务。当用户在前台与应用程序进行交互时,它将执行所有这些任务,但是取决于用户是否启用了某个功能,我们希望继续在后台执行这些任务。因此,当应用启动时(显然是在前台),我们使用
启动服务startService(intent);
[当应用程序转换为后台程序时,我们会检查该功能是否已启用,如果启用,请运行startForeground(id, notificiation);
,该操作可在操作系统中有效地添加不可删除的通知,并且该服务将继续运行。当应用回到前台时,我们称为stopForeground(true)
。如果未启用该功能,则该服务将永远不会设置为前台服务,我们也不会尝试在后台执行这些任务。
所以我的问题是:这足以获得“完整的前台服务性能”吗?还是我因不致电 NOTE:startForegroundService(intent)
而失去了一些东西?我的印象是我们确实有一个可以正常使用的前台服务,但是当我读到我们没有做的foreground services must be started using startForegroundService(intent)
语句时,我感到困惑。如果我们确实需要使用startForegroundService(intent)
,那么我能想到的唯一解决方案是首先启动该服务的常规实例,当应用程序进入后台时,我们将使用startForegroundService(intent)
启动一个新实例。但是,我们是否需要执行此操作,还是在使用startForegund(id, notification)
启动的服务上运行startService(intent)
足以实现前台服务?startForegroundService(intent)
for API> =26。在我们的情况下,我们总是在应用程序处于运行状态时启动服务前景。但是,我确实记得在某些情况下,当我们尝试使用startService(intent)
启动服务时看到了异常,但该应用程序(非常罕见)仍然认为它处于后台状态(也许当应用程序启动时,操作系统中的某些内容就会出现)启动)。因此,如果我赶在发生这种情况时,可以运行startForegroundService(intent)
启动服务。但是,当应用回到前台时,是否可以在该服务上运行stopForeground(true)
?还是自从我们以这种方式启动以来,它将永远永远成为前台服务?