Вызов длинного метода Service из Activity - лучшая практика - PullRequest
0 голосов
/ 11 ноября 2011

Я занимаюсь разработкой приложения со службой, которая переадресует звонки в веб-службу, и несколькими действиями, которые выполняют эти звонки.Действия должны обрабатывать результаты этих вызовов.Например, у меня есть метод writeComment в сервисе, который обращается к веб-сервису и возвращает некоторую информацию о вновь написанном комментарии.

Прямо сейчас я позволил Activity позаботиться обо всех потоках.Activity связывает службу, а затем использует AsyncTask, которая вызывает метод writeComment связанной службы.

Все работает хорошо, пока Activity не останавливается во время работы AsyncTask.Если это произойдет (это легко случается при переключении телефона), AsyncTask умирает насильственной смертью при попытке обновить пользовательский интерфейс в onPostExecute.Я не совсем уверен, как это исправить - мне do нужно сообщить пользователю, что сервер обновлен.

Если я пойду наоборот и зарегистрирую обратный вызов с помощьюСлужба, я все еще немного озадачен, потому что мне нужно уведомить Службу о том, что Деятельность изменилась - я должен сказать ей, чтобы она не уведомляла меня в onDestory первой Деятельности, и перерегистрировать во второй Активации onCreate.И мне нужно разобраться со случаем, когда асинхронная задача завершается после onDestroy и перед onCreate.

Что считается наилучшей практикой в ​​этом случае?

Спасибо, Итай.

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

В моем приложении у меня есть долгосрочная служба и действия, которые должны отображать данные в службе.Служба также проверяет активности при наличии изменений, но активность также может запрашивать службу.Способ, которым я подошел к этому, был двояким.

Во-первых, я привязываю свою активность к Сервису, чтобы отправлять сообщения из Активности в службу.

Во-вторых, Сервис отправляет уведомления с помощью широковещательных рассылок иАктивность слушает эти передачи.Я устанавливаю это в Activity onResume и разрываю в onPause.Я думаю, что это та часть, которую вы упускаете.

1 голос
/ 11 ноября 2011

Моя интуиция подсказывает мне, чтобы служба могла обрабатывать потоки. Службы гораздо менее временны (хотя и в некоторой степени переходные), чем действия, и поэтому у вас будет меньше проблем с потоками, пытающимися взаимодействовать с контекстом (будь то действие или служба), которого больше нет. Вы смотрели на класс IntentService ? Он обрабатывает много потоков для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...