【问题标题】:Android Service ConnectionsAndroid 服务连接
【发布时间】:2011-03-14 05:46:33
【问题描述】:

我正在开发一个在主线程之外运行服务的 android 应用程序。然后它运行另一个存在于单独 apk 文件中的活动。此 apk 需要能够生成自己的服务并与原始服务交换信息(复杂对象)。如果有帮助,它们都会共享这两个服务,因为这些服务存在于两个 apk 引用的 android 库中。有没有办法实现这个功能?有哪些限制,有什么办法可以克服。

【问题讨论】:

    标签: android service connection exchange-server


    【解决方案1】:

    要让服务 2 与服务 1 通信,两者都必须由您编写。如果 '服务存在于两个 apk 引用的 android 库中' 你的意思是它是一个 android 系统服务,那么我认为这是不可能的,除非你覆盖服务定义。

    如果您使用的是 android 系统服务,您可以尝试在服务 1 中使用广播接收器,通知服务 2 可能发布的所有更新。

    如果应用程序 1,2 和服务 1,2 都是您编写的,那么我认为这并不难实现,因为您可以使用意图中的捆绑包共享数据。

    【讨论】:

    • 感谢您的回复。这两项服务都是由我编写的。问题似乎是从 apk 2 中的服务 2 访问服务 1。当我尝试这个时,它告诉我我无权访问服务 Intent gf = new Intent(); gf.setClassName("com.MyServices","com.MyServices.Service1"); bindService(gf, mConnection,Context.BIND_AUTO_CREATE); 它告诉我我没有权限。如果我尝试Intent gf = new Intent("com.MyServices.Service1");,它只会默默地失败。任何尝试都不会导致我的mConnectiononServiceConnected 触发。
    • 既然你已经清楚了这一点,让我指出,如果我是你,我会重新考虑我的设计,仅仅是因为你希望两个 apk 相互通信......如果会发生什么用户会卸载 apk 的吗?我不确定您想通过上述设置实现什么目标,但您始终可以在同一个 apk 中的 2 个不同服务之间交换数据。如果您仍想使用不同的 apk,您还可以做另一件事:为两个 apk 使用相同的包名称,然后在它们之间共享一个 sqlite db 文件(还没有尝试过:P)
    • apk1 不依赖于 apk2,反之亦然。如果卸载了 apk1,则可以理解为 apk2 将不再起作用。你说我可以在同一个apk中的2个不同服务之间交换数据,但是如果apk1直接在apk2上启动一个活动,我可以在2个不同的apk之间交换数据?老实说,我不完全确定我的问题是什么,所以我试图在开始更深入地寻找错误之前确定它是否是概念上的问题。
    • 从另一个开始一个活动不会给启动活动任何类型的控制...(例如,杀死启动活动不会杀死启动的活动,它们独立生活)。拥有像你这样的依赖并不是一个好的设计,无论如何,如果你要记住这个设计,那么你可以尝试一些事情。 Android 提供了一些 IPC 方法,您可以尝试,但这一切都取决于您希望它有多复杂,以及您的应用是否真的需要这种复杂性。
    猜你喜欢
    • 1970-01-01
    • 2013-11-17
    • 2019-08-11
    • 2013-01-11
    • 2015-06-11
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多