Служба: onTaskRemoved не вызывается, если запущена с помощью bindService

У меня есть служба, в которой реализован метод onTaskRemoved().
Когда служба запускается с помощью startService(), функция onTaskRemoved() вызывается, когда приложение удаляется из списка последних приложений смахиванием.

Но если служба запущена с bindService(), то onTaskRemoved() никогда не вызывалась.

Как я могу заставить службу вызывать onTaskRemoved(), когда приложение удаляется из списка последних приложений смахиванием после того, как оно было запущено с помощью bindService()?

Android вызывает следующие методы жизненного цикла, если они запущены:

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

person surlac    schedule 09.06.2014    source источник
comment
Важное примечание: onTrimMemory() вызывается каждый раз, когда приложение переходит в фоновый режим, вам не нужно проводить пальцем, чтобы удалить приложение, чтобы запустить его. Это произойдет, если вы нажмете кнопку «Домой». Так что ваш комментарий вводит в заблуждение.   -  person ForceMagic    schedule 09.01.2015
comment
Попробуйте этот хак (работает) - stackoverflow.com/a/49489478/3879847   -  person Ranjith Kumar    schedule 26.03.2018


Ответы (1)


Служба может быть привязана или запущена, или и то, и другое. Это зависит от того, как вы реализуете onStartCommand и onBind, как говорится в документации.

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

Но если вы хотите, чтобы ваш сервис оставался рядом и разговаривал с клиентами через IBinder, просто запустите сервис, а затем привяжите его.

startService(new Intent(context, CustomerService.class));
// Bind to the service
bindService(new Intent(context, CustomerService.class),
                        mConnection, Context.BIND_AUTO_CREATE);
person danny117    schedule 10.06.2014
comment
Я делаю то же самое, и onStartCommand() также вызывается, но служба не работает в фоновом режиме. Приложение уничтожается, затем служба также уничтожается .. вы можете помочь? - person Nooruddin Lakhani; 26.08.2017
comment
Мне нужно увидеть немного больше вашего кода, чтобы помочь. Задайте вопрос, опубликуйте код. Кто-то здесь, в SO, поможет. - person danny117; 28.08.2017
comment
Это немного работает, когда приложение уничтожается, служба фактически останавливается и снова перезапускается. Его onCreate() и onStartCommand() снова вызывают, я просто хочу, чтобы служба не останавливалась и не перезапускалась снова. Я просто хочу, чтобы он работал постоянно в фоновом режиме. Есть идеи, как этого добиться? - person Nooruddin Lakhani; 29.08.2017