在另一个进程中提供服务,但与主应用程序在同一个apk中,他们可以轻松共享数据吗?

问题描述 投票:0回答:1

如果我在apk中有一个应用和服务。该服务虽然在标签中使用android:process=":SomeService"属性在主应用程序之外的其他进程中运行-该服务可以通过LiveData或LocalBroadcastManager等将数据传播到主应用程序,这些数据可以轻松地在程序中的任何位置进行传输,还是我必须使用一些基于IPC的机制,例如Intents或.aidl等。我希望您会说有一种共享数据的简便方法,但是我怀疑您会说,因为它们处于不同的流程中,所以没有简单的方法可以共享数据。我想避免使用Intents或.aidl或其他任何东西带来的所有开销。还应该说,有一个特殊的原因使我希望在另一个进程中使用该服务。

android-intent android-service ipc android-livedata
1个回答
0
投票

例如,服务可以将数据传播到主应用程序吗?可以轻松传输的LiveData或LocalBroadcastManager程序中的任何位置,还是必须使用基于IPC的机制例如Intent或.aidl或其他

因此,如果为服务声明了android:process,并且分配给此属性的名称以冒号(':')开头,则会在需要时创建一个新进程,并且该服务将在该进程中运行。

您需要使用AIDL与该服务进行通信,因为就Android而言,这是另一个进程;在Android上,一个进程通常无法访问另一个进程的内存。

因此,彼此交谈,他们需要将其对象分解为操作系统可以理解的原语,并为您整理跨越该边界的对象。

我希望您能说有一种共享数据的简便方法,但我怀疑你会说,因为他们是不同的流程没有简单的方法可以做到]

[嗯,这就是android处理模型的工作方式-恐怕还有其他人可以说些不同的话

我想避免使用Intent或.aidl或等等...还应该说有一个特殊的原因我想要在另一个过程中提供服务。

您有在其他进程中运行该服务的特定原因-这使AIDL变得更加强大,因为根据官方android文档,

如果您允许来自不同客户的客户端,则必须使用AIDL来访问您的IPC服务并想要处理的应用程序服务中的多线程。如果您不需要执行跨不同应用程序的并发IPC,您应该创建自己的通过实现绑定程序来实现接口,或者,如果您想执行IPC,不需要处理多线程,请使用使者

[也许您可以考虑探索实现Binder或Messenger的方式-如果该服务可以满足您特定服务的实现详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.