Activity -> Service -> AsyncTask. Из AsyncTask значение.

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
Vovich
Сообщения: 30
Зарегистрирован: 30 май 2013, 15:03

Activity -> Service -> AsyncTask. Из AsyncTask значение.

Сообщение Vovich » 07 май 2014, 16:24

Здравствуйте. Такая задача: с планшета отправлять данные на сервер (http get) и получать результат. Отправка данных / остановка отправки из программы, а сама отправка должна идти в фоновом режиме. Как мне кажется должен быть такой вариант. Есть Activity с кнопками "старт" и "стоп" - для управления и TextView для визуального контроля результата. По кн. "старт" запускается Service, который готовит данные и запускает AsyncTask , который отправляет их на сервер и получает результат (0 или 1). Подскажите, как передать этот результат в Activity (если она запущена), для последующего визуального отображения. Если через Handler, то как AsyncTask про него узнает?
Спасибо.

Donart
Сообщения: 114
Зарегистрирован: 06 ноя 2013, 08:59

Re: Activity -> Service -> AsyncTask. Из AsyncTask значение.

Сообщение Donart » 07 май 2014, 17:30

Зачем Handler, AsyncTask его и так реализует. AsynсTask возращает результат в onPostExecute(), а от туда как хотите передавайте, или методом get() из Activity.

Vovich
Сообщения: 30
Зарегистрирован: 30 май 2013, 15:03

Re: Activity -> Service -> AsyncTask. Из AsyncTask значение.

Сообщение Vovich » 08 май 2014, 08:18

А если я закрою приложение, но чтобы сервис продолжал работать, а потом снова запущу приложение и захочу в нем опять получать данные от Activsynk?

Donart
Сообщения: 114
Зарегистрирован: 06 ноя 2013, 08:59

Re: Activity -> Service -> AsyncTask. Из AsyncTask значение.

Сообщение Donart » 08 май 2014, 10:54

опять получать данные от Activsynk?
ActiveSync? Вы ничего не путаете, об этом речи не было. :)
Если это просто была описка и речь о AsynkTask, то что мешает вызвать его снова?

Vovich
Сообщения: 30
Зарегистрирован: 30 май 2013, 15:03

Re: Activity -> Service -> AsyncTask. Из AsyncTask значение.

Сообщение Vovich » 08 май 2014, 11:33

Извиняюсь, конечно AsyncTask. Не уверен, что get() подойдет. В приложении (если оно запущено) должны отображаться результаты по мере их получения в AsyncTask. А фоновый процесс по обмену данных с сервером с использованием AsyncTask работает постоянно. Наверное приложение как-то должно сказать сервису, что оно запущено и дальше как-то отображать результаты по мере их получения в AsyncTask.
или же как-то через таймер опрашивать...

Donart
Сообщения: 114
Зарегистрирован: 06 ноя 2013, 08:59

Re: Activity -> Service -> AsyncTask. Из AsyncTask значение.

Сообщение Donart » 08 май 2014, 13:24

Ну, незнаю всей Вашей реализациии, но можно просто сделать так. Написать в doInBackground цикл который будет отправлять в Activity промежуточный результат и не надо ничего сообщать в Service. А если все же хотите, то не забывайте про методы onStart() и onResume() у Activity. Так я с этим не сталкивался, но чтобы передать в работающий AsyncTask данные Вам скорее всего придется использовать решения из Java по работе с потоками(synchronized ,volatile) . Тут есть передача данных и из Service в Activity, BroadcastReceiver и PendingIntent. И не забывайте закрывать AsyncTask если он У Вас вечный :? , он будет работать, даже если закрыть Activity и Service.

Vovich
Сообщения: 30
Зарегистрирован: 30 май 2013, 15:03

Re: Activity -> Service -> AsyncTask. Из AsyncTask значение.

Сообщение Vovich » 08 май 2014, 15:31

Ок. Такой вопрос: как из AsyncTask передавать данные в Activity напрямую (минуя сервис) и чтобы в Activity они отображались по мере поступления?
Я так понимаю, чтобы получить данные из сервиса надо их сначала запросить из Activity.
Сейчас реализовал частично: Activity запускает сервис, которйй в свою очередь периодически запускает AsyncTask для отправки данніх и получения результата. В onPostExecute ловлю ответ и вывожу в Toast. А хочу в Activity - что-то типа лога: дата / время результат...

(прошу извинить за назойливость, я только учусь)

Donart
Сообщения: 114
Зарегистрирован: 06 ноя 2013, 08:59

Re: Activity -> Service -> AsyncTask. Из AsyncTask значение.

Сообщение Donart » 08 май 2014, 17:56

Ответы на Ваши вопросы я дал в предыдущем посте. И что-то Вы мудрите с этим Service, зачем он Вам вообще нужен. :)
Разберитесь с работой AsynсTask, он как раз создан для взаимодействия с Activity, сделайте урок который я Вам скинул по ссылке, и тогда Вы поймете как обновлять информацию в Activity. Поменяйте структуру проекта(Service < -Activity -> AsyncTask), если Вам нужен Service, вызывайте и пусть себе висит в памяти. AsyncTask создавайте в Activity . Cоздали Activity - вызвали AsyncTack, закрыли Activity - закрыли AsyncTask(onStart() new AsyncTask, onDestroy() AsynkTask.cancel)

Ответить