android:进程和进程名称

android:进程和进程名称,android,process,Android,Process,我试图理解android:process的属性: 如果指定给此属性的名称 以冒号(“:”)开头,一个新的 进程,应用程序专用, 在需要时创建。如果 进程名称以小写字母开头 这是一个全球性的过程 名称已创建。全球进程可以 与其他应用程序共享, 减少资源使用 如果名称不以冒号开头,是否会创建进程?如果它以大写字母开头呢?如果我把这两条规则混在一起会怎么样 我需要在同一进程中运行两个包中的两个组件以节省资源(并避免在应用程序管理器中列出两个“正在运行的应用程序”)。我的流程名称应该是什么?我需要全球流

我试图理解android:process的
属性:

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

如果名称不以冒号开头,是否会创建进程?如果它以大写字母开头呢?如果我把这两条规则混在一起会怎么样

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

编辑:


我尝试了一个简单的小写名称(第一个包的名称),它似乎像我想要的那样工作。不过我还是觉得我不明白规则。

我想你说的是后台服务,对吧? 如果在没有“:”的情况下启动服务,则服务运行的进程与应用程序运行的进程相同,在这种情况下,它被称为“本地服务”。 若以“:”开头,它将在自己的进程中运行,称为“远程服务”。在这种情况下,可能会被其他活动使用

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

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

希望这有点帮助。 尼里基

如果我把这两条规则混在一起会怎么样

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

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

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

你不仅要摆弄
android:process
,还要摆弄
android:sharedUserId
。这两种工具都不是普通SDK开发人员使用的,尤其是
android:sharedUserId
。事实上,如果你已经发布了你的应用程序,你就不能使用android:sharedUserId
,除非你愿意破坏所有现有用户的应用程序,因为你将无法再访问你的原始数据,因为它将由其他用户帐户拥有

此外,除非你有相反的证据,否则我不会假设这会以某种方式“避免在应用程序管理器中列出两个‘正在运行的应用程序’”

现在,我全力支持效率,因此为GRIN创建额外的流程(例如,让“远程服务”在定制流程中运行的误导性建议)是一个坏主意。如果你为一家设备制造商或一家拥有20多名安卓开发者的公司工作,你想把这件事搞砸,你需要找到在AOSP中使用它的地方,并对你所寻找的信息进行反向工程,因为这些东西的文档严重不足。即使在那里,我也没有看到它在多个软件包之间使用,除了
android.process.acore
com.android.phone
,它们是严重的低级程序,不会是典型的非固件应用程序


因此,我真的建议您不要去管这些事情。

“如果您从以下内容开始”:“它将在自己的进程中运行,称为“远程服务”。在这种情况下,可能会被其他应用程序和活动使用。”--远程服务不需要在自己的进程中运行。嗯,好的。但就我的理解而言,让我们称之为本地服务(运行在与应用程序、共享堆等相同的进程中)和“远程服务”之间的区别是什么呢?提前感谢您的帮助,NYRYRKKIA远程服务已导出,并且有一个为第三方设计的API(例如AIDL)。@Commonware我可以使用广播/广播接收器在应用程序的进程(例如活动)和服务(在自己的进程上运行,android:process=“:SelfProcess”)之间通信。我该怎么办?谢谢