Service: onTaskRemoved not called if started with bindService

surlac picture surlac · Jun 9, 2014 · Viewed 12.3k times · Source

I have a Service in which the onTaskRemoved() method has been implemented.
When the service is started with startService() the function onTaskRemoved() is called when the app is removed from the recent-apps-list by swipe.

But if the service is started with bindService(), then onTaskRemoved() never called.

How can I make the Service call onTaskRemoved() when app removed from recent-apps-list by swipe after it has been started with bindService()?

Android calls the following lifecycle methods if started with:

1. bindService():
Activity﹕ onCreate()
CustomService﹕ onCreate()
CustomService﹕ onStart()
CustomService﹕ onStartCommand()
CustomService﹕ onBind()
// Here we swipe to remove app from recent-apps-list
CustomService﹕ onTrimMemory()

2. startService():
ActivityA﹕ onCreate()
CustomService﹕ onCreate()
CustomService﹕ onStart()
CustomService﹕ onStartCommand()
CustomService﹕ onBind()
// Swipe to remove app from recent-apps-list
CustomService﹕ onTrimMemory()
CustomService﹕ onTaskRemoved() // <===== 
CustomService﹕ onUnbind()

Answer

danny117 picture danny117 · Jun 10, 2014

A service can be bound or started or both. It depends on how you implement onStartCommand and onBind say the docs.

http://developer.android.com/guide/components/services.html

But if you want your service to do both stay around and talk with clients over an IBinder then simply start the service and then bind to it.

startService(new Intent(context, CustomerService.class));
// Bind to the service
bindService(new Intent(context, CustomerService.class),
                        mConnection, Context.BIND_AUTO_CREATE);