如果我在apk中有一个应用和服务。该服务虽然在标签中使用android:process=":SomeService"
属性在主应用程序之外的其他进程中运行-该服务可以通过LiveData或LocalBroadcastManager等将数据传播到主应用程序,这些数据可以轻松地在程序中的任何位置进行传输,还是我必须使用一些基于IPC的机制,例如Intents或.aidl等。我希望您会说有一种共享数据的简便方法,但是我怀疑您会说,因为它们处于不同的流程中,所以没有简单的方法可以共享数据。我想避免使用Intents或.aidl或其他任何东西带来的所有开销。还应该说,有一个特殊的原因使我希望在另一个进程中使用该服务。
例如,服务可以将数据传播到主应用程序吗?可以轻松传输的LiveData或LocalBroadcastManager程序中的任何位置,还是必须使用基于IPC的机制例如Intent或.aidl或其他
因此,如果为服务声明了android:process
,并且分配给此属性的名称以冒号(':')开头,则会在需要时创建一个新进程,并且该服务将在该进程中运行。
您需要使用AIDL与该服务进行通信,因为就Android而言,这是另一个进程;在Android上,一个进程通常无法访问另一个进程的内存。
因此,彼此交谈,他们需要将其对象分解为操作系统可以理解的原语,并为您整理跨越该边界的对象。
我希望您能说有一种共享数据的简便方法,但我怀疑你会说,因为他们是不同的流程没有简单的方法可以做到]
[嗯,这就是android处理模型的工作方式-恐怕还有其他人可以说些不同的话
我想避免使用Intent或.aidl或等等...还应该说有一个特殊的原因我想要在另一个过程中提供服务。
您有在其他进程中运行该服务的特定原因-这使AIDL变得更加强大,因为根据官方android文档,
如果您允许来自不同客户的客户端,则必须使用AIDL来访问您的IPC服务并想要处理的应用程序服务中的多线程。如果您不需要执行跨不同应用程序的并发IPC,您应该创建自己的通过实现绑定程序来实现接口,或者,如果您想执行IPC,不需要处理多线程,请使用使者
[也许您可以考虑探索实现Binder或Messenger的方式-如果该服务可以满足您特定服务的实现详细信息。