81

我有一个经常调用的 BroadcastReceiver,我注意到很多人使用

android: process =":remote" 

在他们的接收器中。我的用于检查一些事情,如果条件匹配,则激活警报。我的问题是我应该使用上面在清单中发布的行吗?如果是这样,这样做有什么好处?

4

1 回答 1

176

通过与您一起定义您的接收器,android:process=":remote"您基本上可以在不同的进程(= VM)中运行您的接收器。对于典型的用例,您不需要在不同的进程中运行它,并且您想做的任何事情都可以在本地运行(在您的 APK 进程中)。

使用的缺点android:process=":remote"是您需要额外的资源才能运行它(在这种情况下是一个单独的进程)。这样做时,您基本上是在处理 2 个虚拟机,并且某些模式(例如单例、静态字段)不能再在您的应用程序和远程服务之间共享。

使用的好处android:process=":remote"是,对于某些用例,在您关闭应用程序或希望远程客户端能够绑定后,启动一个将继续运行(在其自己的进程中)的服务可能会很方便为您服务。在调用方法时在单独的进程中运行时,您的广播接收器不会阻塞您的应用程序主线程onReceive()(但是,还有其他实现方式)。

我发现大多数时候,对于最常见的用例,你可以不使用android:process=":remote".

于 2010-12-10T22:20:38.033 回答