Do I need to call both unbindService and stopService for Android services?

Viewed 20424

In my Android app, I call both startService and bindService:

Intent intent = new Intent(this, MyService.class);
ServiceConnection conn = new ServiceConnection() { ... }

startService(intent)
bindService(intent, conn, BIND_AUTO_CREATE);

Later, I attempt to both unbindService andstopService`:

unbindService(conn);
stopService(intent);

However, I get an exception on the call to unbindService. If I remove this call, the app seems to run properly through the stopService call.

Am I doing something wrong? I thought a bindService call had to be associated with an unbindService call, and a startService call had to be associated with a stopService call. This doesn't seem to be the case here, though.

4 Answers

To answer you question directly, it is "okay" to not call unbindservice BUT it is not recommended. What happens is if your service is not a foreground service, android system may kills it to free up memory. And if there is still some component bounded to it, but you haven't called unbind, it gets unbound by the android system.

See android documentation here

https://developer.android.com/guide/components/bound-services

If your client is still bound to a service when your app destroys the client, destruction causes the client to unbind. It is better practice to unbind the client as soon as it is done interacting with the service. Doing so allows the idle service to shut down. For more information about appropriate times to bind and unbind, see Additional notes.

Related