2015-02-24 33 views
3

有关Android中的进程的三个问题。我正在开发一个应用程序。如果我宣布一个服务到另一个进程在AndroidManifest.xmlAndroid中的进程和单例

<service android:name=".MyService" android:process=":MyProcess"/> 
  1. 运行这是否意味着会有两个JVM实例,使用的MyService之一,而使用其他代码另一个?

  2. 如果上面的问题的答案是YES,那么它是否也意味着如果我有一个单一类使用活动& MyService,那么会为单例创建两个实例吗?

  3. 如何确保只有一个实例被创建&然后由两个进程共享?更好地提供样本:)

==== ==== UPDATE

感谢您的意见和答案(S),不幸的是,我的项目需要使用单独的服务过程它有长时间运行的后台任务。根据你的回复,我有第4个问题:

如果我需要通过一个不可分的对象跨MyService进程和其他代码的过程。可能吗?如何?

+0

1.有在Android ... 2.这就是为什么在单身存储数据是在Android上没有不好的JVM ... 3.不要单用.. 。使用android框架支持的常规IPC方法(小包裹(在Bundles,Intents中),ContentProviders,Binders) – Selvin 2015-02-24 10:18:04

+0

我不知道所有三个co ncern,但我发现有关过程的好信息在这里,这个链接可能会帮助你。 http://stackoverflow.com/questions/7142921/usage-of-androidprocess。 – IshRoid 2015-02-24 10:27:35

+0

@ Leem.fin你需要使不可分类的对象可以被分类: - )参见例子[this](http://stackoverflow.com/questions/7181526/how-can-i-make-my-custom -objects-be-parcelable)回答 – Joris 2016-03-01 12:48:56

回答

4
  1. 是的(以某种方式,但不完全,它是一个dalvik虚拟机,或在棒棒糖艺术),但是,你有两个单独的东西运行服务和代码的其余部分。
  2. 你不能!你刚刚告诉系统有单独的进程。所以它不能拥有“同一个”单身人士。

一种方法是让你的服务实现一个活页夹或AIDL(以防你直接调用方法)或者实现一个ContentProvider,它在你可以从中读取值的过程中是相同的。

或者你可以简单一点,不要使用这个过程。不建议99.9%的使用案例android:process。所以重新评估你的软件。你真的需要它吗?

编辑:

不幸的是,我的项目需要使用单独的服务过程,因为它 一直在后台运行的

如果你的项目需要一个长期运行的后台任务,你需要肯定是Service。但这并不意味着它需要在一个单独的过程中。您项目中的所有活动都可以进入后台并进行垃圾收集,您的服务仍能正常运行。它将继续运行在与活动运行相同的过程中,但服务和单身人员仍然活着。只记得从它return START_STICKY

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

链接约束和AIDL服务指南:

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

+0

感谢您的回复,请检查我的更新:) – 2015-02-24 10:49:39

+0

请参阅我的编辑。并记住AIDL非常复杂。并且Bound是一个稍微复杂一点。你当然想要保持在同一个过程中。 – Budius 2015-02-24 10:57:23

+0

谢谢,但正如我所知,AIDL只接受可传递的可传递对象。我在“UPDATE”部分中的问题实际上是询问如何使用AIDL传递不可Parcel对象。 – 2015-02-25 14:22:38