Android 了解服务流程 编辑以关注问题

Android 了解服务流程 编辑以关注问题,android,service,Android,Service,这个问题似乎很难理解。这里是总结。 我显然不理解android:process的真正效果。谁能给我解释一下 我已经试过了,但还是做不好。有关详细信息,请参见下面的文本,但潜在的问题是:此标记真正做什么 当不同的应用程序访问在“应用程序进程”中运行的服务时会发生什么?如果服务继续运行,相同的对象是否可以存在于不同的进程中 我应该在哪里注意到标签变化的差异 问我看到了什么和尝试了什么对我没有多大帮助。我尝试了一些东西,发现意想不到的效果与我在文档中读到的不匹配。为了和睦相处,我需要事实,而不是我

这个问题似乎很难理解。这里是总结。
我显然不理解
android:process
的真正效果。谁能给我解释一下 我已经试过了,但还是做不好。有关详细信息,请参见下面的文本,但潜在的问题是:此标记真正做什么

  • 当不同的应用程序访问在“应用程序进程”中运行的服务时会发生什么?如果服务继续运行,相同的对象是否可以存在于不同的进程中
  • 我应该在哪里注意到标签变化的差异
问我看到了什么和尝试了什么对我没有多大帮助。我尝试了一些东西,发现意想不到的效果与我在文档中读到的不匹配。为了和睦相处,我需要事实,而不是我自己的假设

原来的问题 应用程序可以绑定到我的Android服务。该服务管理所有应用程序必须相同的内容,以及一个应用程序解除绑定并再次绑定时的内容。服务寿命很长,我可以用前景图标确保它。
现在我无法理解android:process的含义,在互联网上可以找到很多信息,但与我的体验不符

检查我是否登录到消息处理程序和其他位置,如onBind

  • 服务实例的哈希代码
  • 进程ID
  • 服务类中静态对象的哈希代码
然后我从外部应用程序绑定到我的服务。它产生

  • 对于每个绑定,一个新的服务实例hashcode
  • 所有绑定的pid相同
  • 同一静态对象的哈希代码
问题1 这告诉我服务进程在绑定之间保持活动状态,但它总是创建一个新的服务实例。我的假设正确吗

问题2 有趣的是,如果我指定了no
android:process
,或者以冒号开头的进程,或者以小写字符开头的进程,那么上面所说的是正确的,这实际上被记录为具有不同的效果。
我不应该用冒号获取不同的进程ID吗?我理解错了什么

我应该最好指定什么
和id:process
?我假设是以小写字母开头的,因为它在全局进程中运行,但我在测试中看不到区别

问题3 由于我需要保留内部对象,是否可以保留所有服务实例使用的静态/单例对象,并在内部同步对该对象的访问

问题4 我测试了在创建服务实例的同一apk中启动活动时会发生什么。当外部应用程序绑定到我的服务时,如果未指定
android:process
,则活动的服务实例和在外部绑定上创建的服务实例的静态对象哈希代码相同。
如果我指定一个名称(带冒号或不带冒号),这些散列是不同的

对我来说,这意味着没有流程名称,只有一个流程创建所有服务实例,因此静态对象只创建一次。使用给定的进程名称,活动和服务在不同的进程中运行。如果我在服务的manifest部分中通过显式的流程名称解释这一点,强制apk的服务部分位于单独的流程中,对吗

因此,如果我还希望活动访问相同的数据,我最好不要在清单中指定任何进程名称?这如何符合以小写字母开头的名称的全局过程

编辑:希望这能更清楚地说明我想要什么。 我有一个管理一些数据的服务。它由应用程序访问,基本上是一个应用程序,但必须有多个应用程序。此应用程序可以处于活动状态,也可以不处于活动状态,它来自。。。它去了。。。并始终绑定到服务。
每个绑定都会创建一个新的服务实例。但我需要的是访问相同的底层类。现在我问如何做到最好。每个绑定服务使用的单例类?
为此,我需要确保所有绑定都进入同一个过程。(对吗?也许这已经错了) 对android:process标签的检查提出了更多的问题,见上文。所以我很高兴能对这个话题有更多的了解。没有假设,但了解和理解对我有很大帮助


我绑定到该服务,然后使用Messenger与该服务交换消息。没有AIDL或其他方法可以直接调用服务中的方法。

我这样做了:-)这就是我用“for each binding”之类的话告诉大家的见解的来源。这向我展示了发生了什么,但没有解释为什么,或者android:process标签如何影响这种行为。(编辑以使其更清楚)@Kling Klang我不明白你为什么从标题中删除“Android”。如果你知道这个问题,你就会知道Android服务与人们可能想到的其他类型的服务有很大的不同。我们应该弄清楚这个问题所说的是什么。因为标签必须只停留在标签区域,而不能停留在标签区域title@pskink根据我的测试,都是一样的。但这些文件读起来似乎应该有所不同。所以这是我在理解方面的一个巨大差距:-)android:process被记录在哪里。我想我根本不明白这一点。我的意思是我应该看到不同设置的差异。但是在哪里呢?然后回到我的任务上来,处于相同的过程中肯定是共享数据的先决条件,但我还需要什么才能使这项工作起作用呢?