我应该在接收器中使用android:process =“:remote”吗?


74

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

android: process =":remote" 

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


在什么上下文(活动,服务等)中定义接收者?
Pentium10

Receiver在清单中定义,从android的AlarmManager实用程序调用。
杰森

Answers:


170

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

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

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

我发现大多数情况下,对于大多数常见用例,您无需使用即可逃脱android:process=":remote"


我想问一下您提到的wpuld实现无阻塞onreceive()方法的其他方法是什么?我实际上确实正在发生这种情况,一个onReceive方法实际上做了很多工作,我怀疑这可能会在我的软件中引起一些问题……
TiGer 2014年

没有提到另一个隐式好处:在单独的进程上运行组件时,您将使用一个新的VM堆。因此,如果您的应用程序正在执行内存密集型操作,则可以使用一个单独的过程来避免内存不足错误。
罗德里戈·迪亚斯

3
一个人如何与这样的接收者进行通信,我尝试通过Sharedpreferences进行通信,但由于远程接收者具有第一个副本,但没有一个可以继承初始数据
因此
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.