У меня есть приложение, которое выполняет некоторые повторяющиеся фоновые задачи. Я использую службу и Alarmmanager с методом setrepeating. Единственный способ остановить эту услугу - это кнопка, которая появляется на экране моей активности (конечно, система Android может убить ее по любой причине в любое время, но мне все равно, что делает система Android). Моя проблема в том, что через некоторое время моя деятельность будет уничтожена системой Android. У меня есть служба, которая работает вечно, если Android не убьет ее. Мой вопрос в том, как я могу получить ссылку на эту службу, чтобы остановить ее после создания новой активности (я предполагаю, что я создаю новую активность после уничтожения старой) ?.Остановка работы андроида после разрушенной деятельности
ответ
Рассмотрите bindService and unbindService. Когда ваша деятельность создана, вы можете позвонить bindService
и использовать возвращенное связующее для связи с вашим сервисом. Услуга может быть как привязана, так и запущена, если вы не хотите, чтобы вы отключили свою службу после завершения вашей деятельности.
Другим подходом может быть использование LocalBroadcastManager для связи между вашей деятельностью и сервисом.
Наконец, рассмотрите либо Otto, либо Eventbus - два удивительных проекта с открытым исходным кодом для обмена информацией между компонентами вашего проекта Android.
Я не уверен, что они работают для моей проблемы. Я могу общаться между деятельностью и службой. Проблема в том, что моя деятельность уничтожена. Я не могу остановить свое обслуживание. Я также не хочу привязываться к пользователю, потому что я не могу контролировать, когда он уничтожит мою деятельность, и даже после того, как моя деятельность будет уничтожена, я хочу, чтобы мой сервис продолжал работать, если пользователь не остановит его. – mbaydar
Я думаю, вам нужно быть более ясным, что именно вы хотите. Ваш вопрос, кажется, говорит, что вы хотите убить службу, когда действие будет уничтожено. Если это так, привязка - хороший ответ. Если вы хотите что-то еще, скажите нам, что именно вы хотите. –
, если я правильно понимаю, @mbaydar хочет снова подключиться к своему фоновому сервису, как только его деятельность будет уничтожена, а затем воссоздана. Здесь есть два варианта. 1. Запуск службы И привязка к ней, гарантируя тем самым, что unbind не будет убивать службу, но если служба уже запущена, он просто привязывается к уже запущенному экземпляру. 2. Отправка широковещательного события (/ otto/eventbus) на «любую службу, которая может быть там», и ожидание ответа. –
Используйте службу привязки и отвяжите методы обслуживания в своей MainActivity, чтобы вы могли вызвать службу unbind onDestroy()
, когда ваша активность приложений либо явно уничтожена пользователем, либо системой Android, класс обслуживания также уничтожается.
Используйте этот пост в качестве руководства: Example: Communication between Activity and Service using Messaging
Если я использую службу связывания, это значит, что как только моя деятельность будет уничтожена, моя служба также будет уничтожена. Который я не хочу, потому что я не могу контролировать, когда моя деятельность разрушена. Другими словами, я не могу заниматься своей деятельностью так долго, как хочу на заднем плане. Поэтому я не думаю, что ответ является обязательным. – mbaydar
Причина, по которой ваш класс обслуживания работает вечно без закрытия даже при создании нового действия, просто потому, что класс службы не синхронизирован (без связи) с какой-либо деятельностью, в первую очередь, когда вы запускаете приложение в первый раз , – CodeZero
Я думаю, что я не мог объяснить мою проблему четко. Но я нашел ответ на этот пост How to get reference to running service? Dawid Sajdak ответить
private boolean isMyServiceRunning() {
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if ("your.service.classname".equals(service.service.getClassName())) {
return false;
}
}
return true;
}
if(isMyServiceRunning()) {
stopService(new Intent(ServiceTest.this,MailService.class));
}
- 1. Misbehavior Backstack деятельности при разрушенной деятельности
- 2. Остановка работы андроида при закрытии силы
- 3. Остановка деятельности
- 4. Остановка службы в деятельности
- 5. остановка IntentService от деятельности
- 6. андроида: onPostExecute из Asynchtask после деятельности закончил
- 7. андроида: запуск деятельности по ссылке
- 8. андроида макет формы деятельности
- 9. Остановка деятельности рабочего процесса Windows
- 10. Остановка asynctask от другой деятельности
- 11. Остановка функции с работы
- 12. андроида деятельность в связи деятельности
- 13. изменения деятельности в андроида FC
- 14. Начало деятельности от службы андроида
- 15. Вызов другой деятельности в андроида
- 16. Hash Table Print «Остановка работы»
- 17. остановка анимации из другого вида деятельности
- 18. Android остановка Детский деятельность от родительской деятельности
- 19. Удалить фрагмент из деятельности на onResume андроида
- 20. Сессия CakePHP кажется разрушенной после перенаправления на новый сервер
- 21. Ошибка Android Glide: вы не можете начать загрузку для разрушенной деятельности
- 22. JavaFX Gluon выполнить Вид из андроида деятельности
- 23. Внешняя остановка работы во время цикла
- 24. Как отобразить страницу HttpResponse в андроида деятельности
- 25. Отправка команд в ADB от андроида деятельности
- 26. панель поиска для деятельности в андроида приложения
- 27. Ошибка при переключении деятельности в андроида
- 28. Если Отказано открыт новый вид деятельности андроида
- 29. как программно добавить изображение к деятельности андроида
- 30. переключение между различными видами деятельности в андроида
http://stackoverflow.com/questions/27459885/stop-service-in-an-activity это может полезно –
Я думаю, что я просто созданный дубликат этого вопроса http://stackoverflow.com/questions/10482171/how-to-get-reference-to-running-service – mbaydar