android:进程和进程名称

问题描述:

我想了解android:process属性。 Ref saysandroid:进程和进程名称

如果分配给该属性 名与冒号开始(“:”),一个新的 过程中,私有的应用程序,在需要时创建 。如果 进程名称以小写字母 开头,则会创建名称为 名称的全局进程。全球进程可以与其他应用程序共享 ,减少资源使用。

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

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

编辑:

我试图用一个简单的小写字母的域名(第一包的名字),它似乎它的工作像我想要的。不过,我认为我没有得到规则。

如果我混合两个规则会发生什么?

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

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

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

你不仅会与android:process混乱,但你也必须与android:sharedUserId搞砸。这些都不是普通SDK开发人员所使用的,特别是android:sharedUserId。事实上,如果您已经分发了您的应用程序,那么不能使用android:sharedUserId,除非您愿意打破所有现有用户的应用程序,因为您将无法再访问原始数据,因为它会由其他用户帐户拥有。此外,除非您有相反的证据,否则我不会认为这会以某种方式“避免在应用程序管理器中列出两个'正在运行的应用程序'”。

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

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

我想你是在讲背景服务吧? 如果您在不使用“:”的情况下启动服务,则服务运行的过程与您的应用程序所执行的过程相同,在这种情况下,它称为“本地服务”。 如果用“:”启动它,它将在其自己的进程中运行,称为“远程服务”。在这种情况下,可以通过其他活动来使用。

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

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

希望有一点帮助。 nyyrikki

+0

“如果你使用”:“来启动它,它将在它自己的进程中运行,称为”远程服务“,在这种情况下可以被其他应用程序和活动使用。 - 远程服务不需要在自己的进程中运行。 – CommonsWare 2011-04-03 14:11:50

+0

嗯,好吧。但就我的理解而言,让我们称之为本地服务(运行在与应用程序相同的进程中,共享堆等)和不在其自己的进程中运行的“远程服务”之间有什么区别? ?在此先感谢您的帮助,nyyrikki – nyyrikki 2011-04-03 14:21:01

+0

远程服务已导出并具有专为第三方设计的API(例如,AIDL)。 – CommonsWare 2011-04-03 14:28:15