2012-05-30 2 views
2

Я хочу реализовать службу, которая запустит AsyncTask.Android AsyncTask запущен с сервиса

В AsyncTask onProgressUpdate() Я хочу обновить TableLayout в основном потоке.

Все в порядке, но за одно сомнение: Как справиться с ситуацией, когда основная нить была уничтожена или не видна?
Служба будет продолжаться до тех пор, пока она не остановит себя(), и это то, что я хочу.
Но как AsyncTask знает, что не обновлять TableLayout?

ответ

0

Я думаю, что решение по типу предоставления услуги известно, когда основная активность видна или нет через сообщения onResume() и onPause().

Служба, в свою очередь, установит флаг в AsyncTak, когда флаг будет ложным, onProgressUpdate() выйдет без обновления пользовательского интерфейса.

Итак, я понял, что если бы я понял право на документацию по Услугам, моя Служба должна быть запущена, а также связана с тем же действием. Мне нужно только выяснить, как переназначить запущенную службу.

0

ОК, поскольку я читаю ваш второй пост, я лучше понимаю вещи.

У вас есть классическая проблема производителей-потребителей здесь. AsyncTask службы производит то, что должен показать потребитель (основной вид деятельности). Решение заключается в использовании LinkedBlockingQueue для хранения всех загруженных элементов. Для этой операции потребуется иметь собственную AsyncTask, которая будет опросить LinkedBlockingQueue. Вот базовый подход:

У службы есть AsyncTask, которая загружает данные. Каждый элемент хранится в неограниченном LinkedBlockingQueue.

Активность начинается с AsyncTask из onResume и отменяет ее с onPause. Эта задача будет опросить LinkedBlockingQueue, а затем отобразить каждый элемент в TableLayout.

+0

Я думаю, что вы читаете сообщение слишком быстро, если активность пользовательского интерфейса видна, мне нужно обновить TableLayout. Область уведомлений не является решением. Подумайте о фоновой задаче, которая должна загружать 100 файлов и отображать в реальном времени, какие файлы уже были загружены в TableLayout или ListView. – ilomambo

+0

Я отредактировал свой ответ на основе лучшего понимания проблемы. – RajV

+0

Ты дал мне второе решение того, что у меня есть сейчас. У меня есть AsyncTask, который создает в ArrayList и отображает его прогресс в пользовательском интерфейсе. Я хочу переписать мой код для использования сервисов, потому что мне нужен продюсер, чтобы он оставался в живых, даже если пользователь переходит в другое приложение. Из того, что я прочитал в вашем ответе, это не так в вашем решении. См. Мой собственный ответ. – ilomambo

Смежные вопросы