Activity -> Service -> AsyncTask. Из AsyncTask значение.
Activity -> Service -> AsyncTask. Из AsyncTask значение.
Здравствуйте. Такая задача: с планшета отправлять данные на сервер (http get) и получать результат. Отправка данных / остановка отправки из программы, а сама отправка должна идти в фоновом режиме. Как мне кажется должен быть такой вариант. Есть Activity с кнопками "старт" и "стоп" - для управления и TextView для визуального контроля результата. По кн. "старт" запускается Service, который готовит данные и запускает AsyncTask , который отправляет их на сервер и получает результат (0 или 1). Подскажите, как передать этот результат в Activity (если она запущена), для последующего визуального отображения. Если через Handler, то как AsyncTask про него узнает?
Спасибо.
Спасибо.
Re: Activity -> Service -> AsyncTask. Из AsyncTask значение.
Зачем Handler, AsyncTask его и так реализует. AsynсTask возращает результат в onPostExecute(), а от туда как хотите передавайте, или методом get() из Activity.
Re: Activity -> Service -> AsyncTask. Из AsyncTask значение.
А если я закрою приложение, но чтобы сервис продолжал работать, а потом снова запущу приложение и захочу в нем опять получать данные от Activsynk?
Re: Activity -> Service -> AsyncTask. Из AsyncTask значение.
ActiveSync? Вы ничего не путаете, об этом речи не было.опять получать данные от Activsynk?
Если это просто была описка и речь о AsynkTask, то что мешает вызвать его снова?
Re: Activity -> Service -> AsyncTask. Из AsyncTask значение.
Извиняюсь, конечно AsyncTask. Не уверен, что get() подойдет. В приложении (если оно запущено) должны отображаться результаты по мере их получения в AsyncTask. А фоновый процесс по обмену данных с сервером с использованием AsyncTask работает постоянно. Наверное приложение как-то должно сказать сервису, что оно запущено и дальше как-то отображать результаты по мере их получения в AsyncTask.
или же как-то через таймер опрашивать...
или же как-то через таймер опрашивать...
Re: Activity -> Service -> AsyncTask. Из AsyncTask значение.
Ну, незнаю всей Вашей реализациии, но можно просто сделать так. Написать в doInBackground цикл который будет отправлять в Activity промежуточный результат и не надо ничего сообщать в Service. А если все же хотите, то не забывайте про методы onStart() и onResume() у Activity. Так я с этим не сталкивался, но чтобы передать в работающий AsyncTask данные Вам скорее всего придется использовать решения из Java по работе с потоками(synchronized ,volatile) . Тут есть передача данных и из Service в Activity, BroadcastReceiver и PendingIntent. И не забывайте закрывать AsyncTask если он У Вас вечный , он будет работать, даже если закрыть Activity и Service.
Re: Activity -> Service -> AsyncTask. Из AsyncTask значение.
Ок. Такой вопрос: как из AsyncTask передавать данные в Activity напрямую (минуя сервис) и чтобы в Activity они отображались по мере поступления?
Я так понимаю, чтобы получить данные из сервиса надо их сначала запросить из Activity.
Сейчас реализовал частично: Activity запускает сервис, которйй в свою очередь периодически запускает AsyncTask для отправки данніх и получения результата. В onPostExecute ловлю ответ и вывожу в Toast. А хочу в Activity - что-то типа лога: дата / время результат...
(прошу извинить за назойливость, я только учусь)
Я так понимаю, чтобы получить данные из сервиса надо их сначала запросить из Activity.
Сейчас реализовал частично: Activity запускает сервис, которйй в свою очередь периодически запускает AsyncTask для отправки данніх и получения результата. В onPostExecute ловлю ответ и вывожу в Toast. А хочу в Activity - что-то типа лога: дата / время результат...
(прошу извинить за назойливость, я только учусь)
Re: Activity -> Service -> AsyncTask. Из AsyncTask значение.
Ответы на Ваши вопросы я дал в предыдущем посте. И что-то Вы мудрите с этим Service, зачем он Вам вообще нужен.
Разберитесь с работой AsynсTask, он как раз создан для взаимодействия с Activity, сделайте урок который я Вам скинул по ссылке, и тогда Вы поймете как обновлять информацию в Activity. Поменяйте структуру проекта(Service < -Activity -> AsyncTask), если Вам нужен Service, вызывайте и пусть себе висит в памяти. AsyncTask создавайте в Activity . Cоздали Activity - вызвали AsyncTack, закрыли Activity - закрыли AsyncTask(onStart() new AsyncTask, onDestroy() AsynkTask.cancel)
Разберитесь с работой AsynсTask, он как раз создан для взаимодействия с Activity, сделайте урок который я Вам скинул по ссылке, и тогда Вы поймете как обновлять информацию в Activity. Поменяйте структуру проекта(Service < -Activity -> AsyncTask), если Вам нужен Service, вызывайте и пусть себе висит в памяти. AsyncTask создавайте в Activity . Cоздали Activity - вызвали AsyncTack, закрыли Activity - закрыли AsyncTask(onStart() new AsyncTask, onDestroy() AsynkTask.cancel)