2010-11-30 21 views
61

我有一个被称为每隔一段时间广播接收器,和我注意到很多人在他们的接收器使用我应该在接收器中使用android:process =“:remote”吗?

android: process =":remote" 

。我用来检查一些事情,如果条件匹配,然后激活一个警报。我的问题是我应该使用我上面张贴在我的清单中的行吗?如果是的话,这样做的好处是什么?

+0

在什么情况下(活动,服务等)是接收者定义的? – Pentium10 2010-11-30 09:15:27

+0

Receiver在清单中定义,它由android的AlarmManager实用程序调用。 – Jason 2010-12-01 05:32:08

回答

146

通过定义你的接收器android:process=":remote"你基本上运行在不同的过程(= VM)你的接收器。对于典型的用例,你不需要在不同的进程中运行它,无论你想要做什么,都可以在本地运行(在你的APK进程中)。

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

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

我发现大多数情况下,对于最常见的使用情况,您可以不使用android:process=":remote"而逃脱。