我必须为我公司的产品 API 编写一个 Android SDK,供客户的应用程序使用。SDK 将包含一个在独立进程中运行的后台服务(通过android:process="com.my.sdk.process"
在 AndroidManifest.xml 中设置该服务)。
如果有多个应用在使用我的SDK,为了节省资源,如何保证服务进程只存在一个实例,而不是每个应用都拥有一个实例?
我必须为我公司的产品 API 编写一个 Android SDK,供客户的应用程序使用。SDK 将包含一个在独立进程中运行的后台服务(通过android:process="com.my.sdk.process"
在 AndroidManifest.xml 中设置该服务)。
如果有多个应用在使用我的SDK,为了节省资源,如何保证服务进程只存在一个实例,而不是每个应用都拥有一个实例?
最简单的方法是将服务放在单独的 APK 中,但代价是让用户完成 APP 的安装过程。
但是,如果我理解正确,您希望避免这种情况,并在所有客户端应用程序中拥有相同服务的实例,并且在任何给定时间点选出其中一个,然后所有客户端将使用 AIDL 与该选择的服务通信.
我还没有尝试过,但我们可以尝试以下方法 1)在单独的进程中托管服务,但让它们共享相同 2)从所有客户端中存在的 SDK 中,使用意图绑定服务 Intent intent = new Intent("this .should.be.same.for.everybody");
希望您的每个应用程序中的所有服务代码都应该收到回调。您可以让他们基于 1) 最新版本 2) 第一个可用的版本 3) 功能......等等来实现选举/选择逻辑。
您还必须承担以下情况的开销 1) 如果托管正在运行的服务的应用程序未安装怎么办 2) 如果有更新怎么办 (a) 更新当前正在运行的服务 (b) 更新之前的服务未运行但更新后,成为选择的候选者。
让我知道它是否有效。