关于Android中的流程的三个问题.我正在开发一个应用程序.如果我在AndroidManifest.xml中声明要在另一个进程中运行的服务

<service android:name=".MyService" android:process=":MyProcess"/>
这是否意味着将有两个JVM实例,一个由MyService使用,另一个由其他代码使用?
如果上述问题的答案是肯定的,那么这是否也意味着如果我有一个活动& MyService,然后将为单例创建两个实例?
如何确保只创建一个实例&然后由两个进程共享?更好地提供样本:)

==== ==== UPDATE

感谢您的所有评论和答案,遗憾的是,我的项目需要使用单独的服务流程,因为它具有长时间运行的后台任务.根据你的回复,我有第四个问题:

如果我需要在MyService进程和其他代码的进程之间传递一个非parcelable对象.可能吗?如何?


解决方法:

是(以某种方式,但不完全是,它是dalvik VM,或者是Lollipop ART),但是,是的,你有两个独立的东西运行服务和其余的代码.
是的
你不能!您刚刚告诉系统有单独的进程.所以它不能有“相同”的单身人士.

一种方法是让您的服务实现一个绑定器或AIDL(如果您要直接调用方法)或实现一个ContentProvider,这可以从您可以读取其中的值的进程中相同.

或者你可以让它变得更简单,而不是使用这个过程. 99.9%的用例android:进程不建议.因此,重新评估您的软件.你真的需要它吗?

编辑:

unfortunately, my project need to use separate service process as it
has long running background tasks

如果您的项目需要长时间运行的后台任务,那么您肯定需要一个服务.但这并不意味着它需要处于一个单独的过程中.您项目中的所有活动都可以转到后台并进行垃圾回收,您的服务仍可正常运行.它将继续在活动运行的同一过程中运行,但服务和单身人士仍然活着.记得从它返回START\_STICKY.

如果你仍然认为你需要在一个单独的过程中使用它(我认为你不需要).然后你需要实现一个绑定服务(或者可能是AIDL,我不确定绑定服务是否可以跨进程工作),将活动连接到它并使用普通方法如public void takeThisObJect(对象引用)给出对象的引用;

链接到绑定和AIDL服务指南:

http://developer.android.com/guide/components/bound-services.html
http://developer.android.com/guide/components/aidl.html

标签: android, singleton, android-service

相关文章推荐

添加新评论,含*的栏目为必填