android:进程和进程名称

时间:2011-04-03 13:26:28

标签: android process

我正在尝试了解android:process属性。 Ref says

  

如果为此属性指定了名称   以冒号(':')开头,一个新的   进程,私有的应用程序,   在需要时创建。如果   进程名称以小写字母开头   品格,这是一个全球性的过程   名称已创建。全球流程可以   与其他应用程序共享,   减少资源使用。

如果名称不以冒号开头,是否会创建一个进程?如果它以大写字母开头怎么办?如果我混合使用这两个规则会发生什么?

我需要在同一进程中运行两个包中的两个组件以节​​省资源(并避免在应用程序管理器中列出两个“正在运行的应用程序”)。我的流程名称应该是什么?我需要一个全球流程吗?

修改

我尝试使用一个简单的小写名称(第一个包的名称),它看起来像我想要的那样工作。我仍然认为我没有遵守规则。

2 个答案:

答案 0 :(得分:6)

  

如果我混合这两条规则会怎样?

那是不可能的。冒号不是大写字母。

  

我需要在同一进程中运行两个程序包中的两个组件以节​​省资源(并避免在应用程序管理器中列出两个“正在运行的应用程序”)。

这真的不是一个好主意。将它们放在同一个包装中,或让它们独立运行。

您不仅需要使用android:process,还必须使用android:sharedUserId。这些都不是普通SDK开发人员使用的,尤其是android:sharedUserId。事实上,如果您已经分发了应用程序,那么除非您愿意破坏所有现有用户的应用程序,否则无法使用android:sharedUserId,因为您将无法再使用访问您的原始数据,因为它将由其他一些用户帐户拥有。

此外,除非您有相反的证据,否则我不会认为这会“避免在应用管理器中列出两个'正在运行的应用'”。

现在,我全力以赴提高效率,因此为grin创建额外的流程(例如,误导性的建议使“远程服务”在自定义流程中运行)是一个坏主意。如果您为一家设备制造商或拥有20多名Android开发人员的公司工作,并且您想要解决这个问题,那么您将需要找到在AOSP中使用它的位置并对信息进行反向工程你寻求,因为这些东西严重缺乏记录。即使在那里,我也没有看到它在多个软件包之间使用,除了android.process.acorecom.android.phone,它们是严重的低级进程,并不是典型的非固件应用程序。

因此,我真的建议你把这些东西单独留下。

答案 1 :(得分:0)

我猜你是在谈论后台服务,对吧? 如果您在没有“:”的情况下启动服务,则该服务正在运行与您的应用程序相同的过程,在这种情况下,它称为“本地服务”。 如果用“:”启动它,它将在自己的进程中运行,称为“远程服务”。在这种情况下,可以使用其他活动。

默认情况下,Android会在第一个组件需要运行时为应用程序创建一个进程。然后所有组件都在该过程中运行。默认进程的名称与元素设置的包名称匹配。

似乎您不必提供android:process参数,除非您要指定应用程序进程的名称。如果您希望应用程序的某些组件在不同的进程中运行,正如我在上面的服务示例中所描述的那样。

希望有点帮助。 nyyrikki