Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to keep a Service with listeners alive after unbind in Android?

I'm currently build an chat app using XMPP. I've created a service to handle the connection and incoming messages, adding the different listeners needed.

The problem is, however, whenever the activity calls unbind on the service (e.g. when the activity is paused or stopped when the user puts the app in the background) the service gets destroyed, even though it has listeners inside it (such as a chat listener, message listener, etc..)

How can I keep my service alive to be able to receive messages when the app is in the background? I read that using a foreground service is quite frowned upon, so I'd rather avoid that if possible.

like image 664
Pat Avatar asked Apr 06 '14 15:04

Pat


People also ask

Can a service bind to another service android?

Binding to a started service As discussed in the Services document, you can create a service that is both started and bound. That is, you can start a service by calling startService() , which allows the service to run indefinitely, and you can also allow a client to bind to the service by calling bindService() .

Can I bind a foreground service?

So in such case, we need to create a Foreground service and can bind our Activity to the Service class. When any client bind to the Service and another client request to bind the same service. It will get the instance of service created previously and our service class will not be restarted or anything.


1 Answers

I actually had this when developing my app recently.

The trick is to start the Service on its own and then bind to it using the Intent. When you unbind from it, the Service will still continue running.

Intent i = new Intent(this, DataService.class);
startService(i); 
bindService(i, this, Context.BIND_AUTO_CREATE);
like image 163
CarbonAssassin Avatar answered Sep 23 '22 01:09

CarbonAssassin