Android上允许的服务和接收器的最大数量

3

我的应用有6个服务(其中3个是IntentService)和4个接收器(其中1个是本地接收器)。

我想知道:

  1. 注册服务和接收器是否有任何限制(例如最大数量)?
  2. 在我的特定情况下,拥有这么多服务/接收器是否健康?它会在Android运行时被终止吗?

大约十几个在我看来是可以的。 - pskink
有没有任何文档支持这个观点,还是基于你自己的经验? - Alon Levanon
我知道这听起来不太专业,但这是我的直觉... :) - pskink
1个回答

2
有没有关于注册服务和接收器的限制(如最大数量)?
我猜测上限大约为20亿左右(Integer.MAX_VALUE)。
话虽如此,我认为你的服务数量是代码异味。
它会在Android运行时被杀掉吗?
就我所知,Android在终止进程的优先级方案中并未考虑服务(更不用说接收器)的数量。

在这种情况下,最大推荐的服务数量是多少? - Alon Levanon
@AlonLevanon: 在我看来,最多两个就足够了。一个IntentService用于处理所有事务性工作,可能还需要一个额外的Service用于用户控制下的持久操作(例如媒体播放)。请记住,如果您使用命令模式,可以使用Intent extras通过startService()onStartCommand()来向服务传递不同的操作信号。因此,例如,当您可以在onStartCommand()中使用if语句来区分三个(或更多)不同的命令时,使用三个IntentServices没有太大价值。 - CommonsWare
@AlonLevanon:偶尔应用程序可能需要更多,如果它们需要一些特殊的服务类(例如AccessibilityService),但这很少见,并且它们需要其中之一一个IntentService 一个常规Service的几率相当小。 - CommonsWare
我的应用程序应该处理三种类型的推送:位置更新、服务器上的数据更改和其他用户的数据更改。 我为每种类型创建了一个IntentService,以避免在一个IntentService上负载过重,并确保我能够获取所有内容。 位置更新推送可能会在一分钟内达到几百个。 在我的情况下,我应该将所有的IntentServices合并成一个吗? - Alon Levanon
@AlonLevanon:如果你担心负载,答案不是“创建一堆服务”,而是“创建更好的服务”。添加更多的服务并不会让手机变得更好,每个startService()调用都涉及IPC等。例如,您可以自己编写一个类似于IntentService的工作方式,使用ThreadPoolExecutor,以允许您同时处理多个命令,但仍然可以调整线程数。或者,跳过命令协议,使用进程内事件总线将工作传递到Service以在线程池上进行处理。 - CommonsWare
谢谢你的帮助... [已解决] - Alon Levanon

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