Что произойдет, если пользователь нажмет BACK или HOME после ввода «данных о проблеме», до того, как «решение» будет готово?
Если ответ таков, что вам не нужно делатьчто угодно, затем избавьтесь от Service
и попросите Activity
выполнить работу по вычислению решения (возможно, с использованием AsyncTask
).Вы ничего не получите в этом случае, используя Service
.
Если, однако, пользователь все еще захочет «решение», тогда использование Service
хорошо, но вы должны принятьучтите, что Activity
, запустивший службу, может больше не существовать или не находиться на переднем плане.
Один из способов справиться с этим - использовать упорядоченную рассылку.Попросите Activity
зарегистрировать BroadcastReceiver
с высоким приоритетом для трансляции, когда она находится на переднем плане (через onResume()
и onPause()
), и зарегистрировать BroadcastReceiver
с низким приоритетом для той же трансляции через манифест.Service
будет sendOrderedBroadcast()
, когда его работа будет завершена.Activity
-registered BroadcastReceiver
обновит свой пользовательский интерфейс с результатом и прервет трансляцию.Зарегистрированный в манифесте BroadcastReceiver
вызовет Notification
, чтобы сообщить пользователю о выполненной работе. Вот блог с более подробной информацией об этом шаблоне, а - пример проекта , демонстрирующий его использование.