gpt4 book ai didi

android - 两个应用程序的相同 Android 服务实例

转载 作者:行者123 更新时间:2023-11-29 01:30:27 24 4
gpt4 key购买 nike

我有两个使用完全相同库的 Android 应用程序。这个库定义了一个 Android 服务。首先,我在第一个应用程序中绑定(bind)服务 - 没关系。其次,我在第二个应用程序中绑定(bind)服务,结果第二个服务的实例被引发,并且在它之后运行两个服务(一个用于第一个应用程序,一个用于第二个应用程序)。

我只想拥有一个服务实例,即。当第一个应用程序绑定(bind)服务时 - 该服务开始工作。现在,当第二个应用程序绑定(bind)服务时,我想使用这个正在运行且只有一个服务实例的服务。

最佳答案

通常这是通过三个模块完成的:

  1. 使用 AIDL 定义将绑定(bind)到的服务接口(interface)的库模块。
  2. 一个将库模块作为依赖项的应用程序模块,它定义了一个符合#1 中指定接口(interface)的服务。此应用托管将绑定(bind)到的服务。
  3. 另一个应用模块,它也有库模块作为依赖项,但没有定义服务实现。

两个应用程序(#2 和#3)都可以绑定(bind)到该服务。不同之处在于#2 在本地绑定(bind)到它,而#3 通过 IPC(进程间通信)远程绑定(bind)到它。请注意,为了使远程绑定(bind)的应用程序 (#3) 正常工作,必须先安装实际实现该服务的其他应用程序 (#2)。

This page讨论如何使用 AIDL。

编辑

您的建议是将服务打包到两个 APK 中。这应该会导致每个应用程序绑定(bind)到其本地服务,这不是您想要的。

我唯一能想到的就是让你的服务在你的 AndroidManifest 中有 android:enabled="false"。当您尝试绑定(bind)到服务时,如果绑定(bind)失败(bindService() 返回 false),那么您可以使用 PackageManager启用您的本地服务并尝试再次绑定(bind)。

理论上,第一个应用程序不会绑定(bind)任何内容,因此它会启用自己的服务,但后续应用程序会找到并绑定(bind)到第一个应用程序。您必须试一试并确保它适用于不同的安装顺序,并测试如果您安装了两个应用程序并卸载其服务为“Activity ”的应用程序时会发生什么。

您仍然需要 AIDL 来定义绑定(bind)接口(interface)并允许跨进程绑定(bind)。

话虽如此,我想知道这些努力是否值得。

关于android - 两个应用程序的相同 Android 服务实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31506177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com