Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Should I use android: process =":remote" in my receiver?

I have a BroadcastReceiver which is called every so often, and I have noticed many people use

android: process =":remote"  

in their receiver. Mine is used to check a few things and if the conditions match then activate an alarm. My question is should I use the line I had posted above in my manifest? And if so what are the benefits of doing so?

like image 321
Jason Avatar asked Nov 30 '10 06:11

Jason


People also ask

What is Android process remote?

Android offers a mechanism for interprocess communication (IPC) using remote procedure calls (RPCs), in which a method is called by an activity or other application component, but executed remotely (in another process), with any result returned back to the caller.

What is receiver in Android manifest?

A broadcast receiver (receiver) is an Android component which allows you to register for system or application events. All registered receivers for an event are notified by the Android runtime once this event happens.

What is service and receiver in Android?

A Broadcast Receiver is a system listener (events from the OS), or listener to other apps. Service is what you use internally in your App.

Which are the broadcast receiver are available in Android?

There are two types of broadcast receivers: Static receivers, which you register in the Android manifest file. Dynamic receivers, which you register using a context.


1 Answers

By defining your receiver with android:process=":remote" you basically run your receiver in a different process (= VM). For typical use-cases, you don't need to run this in a different process, and whatever you want to do can probably run just fine locally (in your APK process).

The drawback of using android:process=":remote" is that you need additional resources for it to run (in this case a separate process). When doing so, you're basically dealing with 2 VMs, and some patterns like singletons, static fields can no longer be shared between your app and your remote service.

The benefit of using android:process=":remote" is that for some use-cases, it might be handy to start a service that will keep on running (in its own process) after you've shutdown your application, or if you want remote clients to be able to bind to your service. Your broadcast receiver will not block your applications main thread when running in a separate process upon calling the onReceive() method (however, there are other ways of implementing this).

I've found that most of the time, for most common use-cases, you can get away without using android:process=":remote".

like image 171
ddewaele Avatar answered Sep 20 '22 03:09

ddewaele