когда я открываю активность моего проекта, я вызываю метод startService(Intent intent)
для запуска новой службы.
Когда действие уничтожается, служба не должна быть убита (потому что я не использовал метод bindService()
), но факт заключается в том, что когда я закрываю свою деятельность, служба убивается, и через секунду система создает новую службу (Я подтвердил, что система снова вызывает метод onCreate()
моей службы). Что мне нужно сделать, чтобы сохранить только одну услугу? Спасибо вам
Андроид - служба прекращается, когда активность уничтожается
Ответ 1
Чтобы служба работала независимо от основного процесса вашего приложения, и чтобы убедиться, что Android не убивает его, когда он что-то делает, вам нужно сделать две вещи. Попробуйте.
-
Запустите службу в отдельном процессе. Это можно сделать, добавив следующий атрибут в объявление службы в манифесте:
android:process=":somenamehere"
-
Когда ваша служба запущена, и вы не хотите, чтобы ее убили ОС, вы должны использовать метод
startForeground(int id, Notification notification)
. Когда служба завершает все, что делает и может быть убита ОС, вызовитеstopForeground(boolean removeNotification)
. "startForeground" требует уведомления как аргумента, потому что каждая служба переднего плана должна отображать уведомление, чтобы пользователь понял об этом.
Надеюсь, это поможет вам.
Ответ 2
Я имею в виду, что я держу кнопку "Домой", а затем убиваю свою активность из списка открытых приложений
Это не "закрывает" действие. Это завершает ваш процесс. Пользователь может прекратить ваш процесс всякий раз, когда пользователь хочет, через это или через сторонние приложения для управления задачами. Вы ничего не можете с этим поделать - вы не можете остановить пользователя от завершения процесса. Поскольку ваш процесс остановится и по другим причинам (например, по старости), у вас есть много причин для рассмотрения этого случая.
Ответ 3
Изменить: См. ответ CommonsWare
Старый ответ: вы должны переопределить метод public int onStartCommand(Intent intent, int flags, int startId)
и вернуть значение START_STICKY
в качестве режима вашей службы.
это приведет к тому, что ваша служба будет работать, когда действие будет уничтожено или даже когда вы выйдете из приложения, если вы явно не назовете stopService(Intent)