Когда использовать сервис в Android - PullRequest
0 голосов
/ 09 июня 2010

У меня есть класс, который выбирает данные в ответ на нажатия кнопок в основном действии. К сожалению, я продолжаю сталкиваться с проблемами, потому что этот класс не является Activity или Service. Например, без контекста я не могу перевести идентификатор ресурса в строку:

getString(R.string.example_string); // Doesn't work

Должен ли я превратить этот класс в Службу и заставить основное действие остановить класс, когда он закрыт? Должен ли я передать контекст из Activity в этот класс, как этот?

MyClass c = new MyClass(this);

Или есть лучший способ решить эту проблему?

Эта проблема также возникает, когда я пытаюсь отправить тост из этого класса.

Обновление: Эрих и Януш указали мне в направлении класса AsyncTask, который отлично работает, за исключением того, что он создает новый поток и никогда не убивает этот поток. Это означает, что каждый раз, когда пользователь нажимает кнопку, добавляется другой поток, а старые просто остаются там.

Ответы [ 2 ]

4 голосов
/ 09 июня 2010

Если у вас есть фоновое действие, жизненный цикл которого не связан с вашей деятельностью, я бы использовал Service.В этом случае Service будет иметь свой собственный Context, поэтому вам не нужно будет передавать его. Однако, если вам необходимо выполнить фоновое действие в ответ на событие пользовательского интерфейса (и при необходимости опубликовать результатыобратно в поток пользовательского интерфейса), я бы порекомендовал вам использовать AsyncTask.

2 голосов
/ 09 июня 2010

Я согласен с Эрихом, если у вас есть что-то маленькое, например, публикация изменений в веб-интерфейсе или загрузка чего-либо из памяти телефона для отображения на экране, используйте Async Task .Если задача завершится очень быстро (несколько секунд), вы можете создать анонимный класс внутри своей деятельности.Это позволит вам использовать неявную ссылку на внешнюю активность внутри задачи, и вы сможете получить свой контекст оттуда.

Если задача выполняется дольше, вы можете передать контекст.Если вы передаете контекст, постарайтесь не передавать это из действия, используйте this.getApplicationContext (), это минимизирует количество ссылок на ваше действие и позволит сборщику мусора правильно очиститься.

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