Java Android分发包含后台服务的SDK。

Java Android分发包含后台服务的SDK。,java,android,android-service,Java,Android,Android Service,我想创建一个可以重新分发的android sdk。在该SDK中,它有一个服务 假设appA和appB与我的SDK集成,如果appA和appB启动该服务,将有2个服务运行还是只有一个 有没有办法确保只能运行一个服务 或者在SDK中分发服务不是一个好主意 在该SDK中,它有一个服务 我将其解释为“在该SDK中,它有一个扩展服务的Java类,我希望该服务将被手动或自动注册到应用程序的清单中(例如,通过AAR的清单合并)” 假设appA和appB与我的SDK集成,如果appA和appB启动该服务,将有2

我想创建一个可以重新分发的android sdk。在该SDK中,它有一个服务

假设appA和appB与我的SDK集成,如果appA和appB启动该服务,将有2个服务运行还是只有一个

有没有办法确保只能运行一个服务

或者在SDK中分发服务不是一个好主意

在该SDK中,它有一个服务

我将其解释为“在该SDK中,它有一个扩展
服务的Java类,我希望该
服务
将被手动或自动注册到应用程序的清单中(例如,通过AAR的清单合并)”

假设appA和appB与我的SDK集成,如果appA和appB启动该服务,将有2个服务运行还是只有一个

将有零个、一个或两个服务实例

如果两个开发人员都搞砸了,未能将服务添加到他们的清单中,那么零将是零,在这种情况下,它将永远不会运行

如果两个开发人员都将服务添加到他们的清单中,并通过显式的
意图启动该服务,则会出现两种情况

在各种情况下,只有一个服务将运行(例如,一个开发人员出错,没有将服务添加到清单中,而另一个开发人员执行并使用显式的
意图

有没有办法确保只能运行一个服务

不容易。首先,除非您同时是appA和appB的开发者,否则这些开发者可以做他们想做的事情,并且他们可能不希望其他应用与您的服务副本对话(例如,出于安全原因)。您还必须处理安装了appA但未安装appB或安装了appB但未安装appA的情况。您必须处理这样的情况:第一个appA和appB都已安装,并且它们选择使用appA的服务,然后用户卸载appA,-现在appB将无法再访问appA内部存储部分中服务管理的数据

或者在SDK中分发服务不是一个好主意


在JAR或AAR中分发服务本质上没有什么错误。试图强制多个应用程序使用同一个服务实例(仅从其中一个应用程序中),最好是很棘手的,最坏是很危险的,因此我会尽量避免这一要求。

如果我创建一个MyApp,它是唯一拥有该服务的应用程序,那该怎么办。然后,appA和appB可以通过AIDL与服务交互。这是更好的解决方案吗?我看到的缺点是必须安装MyApp才能与服务交互。@pdiddy:“这是一个更好的解决方案吗?”--前提是appA和appB可以避免使用未安装的MyApp,或者用户明确认为MyApp是一个有效的先决条件。如果用户合理地认为appA应该在没有MyApp的情况下工作,而appA不能在没有MyApp的情况下工作,那么用户会感到恼火。与其他IPC机制相比,AIDL是否是正确的解决方案是另一个问题。