在前台启动两个服务?

5
为了保持我的服务的活性,我能够有多个前台服务吗?
我同时启动了两个服务,我不想让它们被销毁。经过数小时的阅读,我发现解决方法是返回START_STICKY并在我的服务上使用startForeground(...)。但是,我有两个服务,所以我能让它们都在前台,并且都不被销毁吗?

1
我不理解你的问题。你想让两个“服务”保持活动状态还是想要保持“活动”活动状态?在“服务”中返回start sticky对任何“活动”的生命周期没有影响。 - Xaver Kapeller
1
@RuchirBaronia 也许你应该只使用一个服务,并在该服务内创建两个线程来达到你的目的。 - Dhaval Patel
@XaverKapeller 我不关心我的活动。我只想让长时间运行的服务在后台运行,即使手机屏幕处于睡眠状态并且应用程序已关闭。 - Ruchir Baronia
1
请注意:以下是剧透,您试图做的事情是不可能的。在Android上没有任何东西可以无限期地保持某些东西的生命。当然,返回START_STICKY可以增加您的Service开始时的存活几率,但是仍然有无数种可能会导致您的Service被杀死-无论是否为粘性。 - Xaver Kapeller
2
@RuchirBaronia 具体设备的机会高低取决于特定情况。它们可能更高或更低,但从来不是可以忽略的。重要的是:没有任何东西保证一直存活。Android 不是这样设计的,决定何时终止某个应用程序的策略在每个新版本中都变得越来越激进。当然,这是应该的。你不能依赖某些东西一直存活,因为这在移动设备上基本上是错误的方法。 - Xaver Kapeller
显示剩余18条评论
1个回答

6

有几个方面需要考虑。

  1. 首先:如果您有两个前台服务,则必须同时有两个通知。这被视为一项安全功能(例如,请查看this post)。对于一个应用程序在状态栏中具有两个图标可能会让用户感到非常困惑,因此我认为这已经足够放弃这个想法了。
  2. 如评论所述:即使在前台启动,服务也可能被销毁。请记住这一点。然而,在我的经验中,这种情况很少发生,几乎从不发生——除非是...
  3. ... 预装有启动管理器或节能器的设备(例如许多华为设备)。如果您的应用程序未正确配置,则服务将在屏幕关闭几秒钟/几分钟后被杀死,或者它将在重新启动后不会自动启动。

因此,像往常一样,它取决于您想要实现的确切内容 ;) 但对我来说,看起来好像您可以在一个粘性服务中实现两个线程-我在这里看不到任何缺点。

如果您的应用程序被任何类型的启动管理器、崩溃或强制关闭所停用,您的用户可能需要重新启动应用程序(请参见此帖子,其中包括应用程序状态)。

希望这可以帮到您!


在你的第三点中提到的“适当配置”,我应该怎么做呢? - Ruchir Baronia
1
你对此无能为力。如果制造商包含了阻止你的应用程序(正确)工作的应用程序,你唯一能做的就是告诉用户如何配置这些工具。很抱歉... :( - Trinimon
我不同意。有些情况下,两个通知比一个更好。想象一下一个被设计用来监控多个事物并且可以独立停止/启动的应用程序,没有办法在一个通知中实现这一点。例如计时器应用程序、多个计时器等。 - behelit
@behelit:就像你所说的:“一些情况……”-是的,肯定有一些。然而,OP的问题与“为了保持我的服务活着……”有关,我认为通常情况下不应该使用多个粘性服务,只是为了处理多个长时间运行的后台任务。但是,正如我所写的那样:“这取决于你想要实现什么”。 - Trinimon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接