我正在尝试了解android:process
属性。 Ref says:
如果为此属性指定了名称 以冒号(':')开头,一个新的 进程,私有的应用程序, 在需要时创建。如果 进程名称以小写字母开头 品格,这是一个全球性的过程 名称已创建。全球流程可以 与其他应用程序共享, 减少资源使用。
如果名称不以冒号开头,是否会创建一个进程?如果它以大写字母开头怎么办?如果我混合使用这两个规则会发生什么?
我需要在同一进程中运行两个包中的两个组件以节省资源(并避免在应用程序管理器中列出两个“正在运行的应用程序”)。我的流程名称应该是什么?我需要一个全球流程吗?
修改
我尝试使用一个简单的小写名称(第一个包的名称),它看起来像我想要的那样工作。我仍然认为我没有遵守规则。
答案 0 :(得分:6)
如果我混合这两条规则会怎样?
那是不可能的。冒号不是大写字母。
我需要在同一进程中运行两个程序包中的两个组件以节省资源(并避免在应用程序管理器中列出两个“正在运行的应用程序”)。
这真的不是一个好主意。将它们放在同一个包装中,或让它们独立运行。
您不仅需要使用android:process
,还必须使用android:sharedUserId
。这些都不是普通SDK开发人员使用的,尤其是android:sharedUserId
。事实上,如果您已经分发了应用程序,那么除非您愿意破坏所有现有用户的应用程序,否则无法使用android:sharedUserId
,因为您将无法再使用访问您的原始数据,因为它将由其他一些用户帐户拥有。
此外,除非您有相反的证据,否则我不会认为这会“避免在应用管理器中列出两个'正在运行的应用'”。
现在,我全力以赴提高效率,因此为grin创建额外的流程(例如,误导性的建议使“远程服务”在自定义流程中运行)是一个坏主意。如果您为一家设备制造商或拥有20多名Android开发人员的公司工作,并且您想要解决这个问题,那么您将需要找到在AOSP中使用它的位置并对信息进行反向工程你寻求,因为这些东西严重缺乏记录。即使在那里,我也没有看到它在多个软件包之间使用,除了android.process.acore
和com.android.phone
,它们是严重的低级进程,并不是典型的非固件应用程序。
因此,我真的建议你把这些东西单独留下。
答案 1 :(得分:0)
我猜你是在谈论后台服务,对吧? 如果您在没有“:”的情况下启动服务,则该服务正在运行与您的应用程序相同的过程,在这种情况下,它称为“本地服务”。 如果用“:”启动它,它将在自己的进程中运行,称为“远程服务”。在这种情况下,可以使用其他活动。
默认情况下,Android会在第一个组件需要运行时为应用程序创建一个进程。然后所有组件都在该过程中运行。默认进程的名称与元素设置的包名称匹配。
似乎您不必提供android:process
参数,除非您要指定应用程序进程的名称。如果您希望应用程序的某些组件在不同的进程中运行,正如我在上面的服务示例中所描述的那样。