androidandroid-serviceandroid-service-binding

Service: onTaskRemoved not called if started with bindService


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()

Solution

  • 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);
    

    Edit 20220314. "future versions of the os" may end the service when it doesn't have a notification card for the user to interact with the service.

    ... lots have changed since I answered this I got a recent vote so here I am. You want your service to run in the background have a notification going and a way for the user to interact with the service in the notification. You've seen them the play pause controls on music and video notifications. Without a notification the os might end your service.