Комментарии 29
А правда, что кто-то для сетевых соединений запускает сервисы?)
0
Кстати, запуск повторяющихся задача можно реализовать, если в Runnable, соответствующий задаче, добавить handler.postDelayed(this, TIMEOUT);
+1
Если сетевое соединение должно некоторое время поддерживаться даже если пользователь выйдет из приложения (из его UI), то нужен сервис.
0
cовсем не обязательно, можно в отдельном потоке, просто уровень приложения поднять и в бекграунде система его не будет убивать часто
0
Например, в моем проекте критично быть онлайн и получать обновления. Информация об обновлениях показывается в области уведомлений. Приложению при этом совсем не нужно быть запущенным.
Для всех сетевых взаимодействий запущен один отдельный поток с блокирующей очередью запросов. Такой подход себя зарекомендовал в нескольких проектах (Android и Java ME).
Для всех сетевых взаимодействий запущен один отдельный поток с блокирующей очередью запросов. Такой подход себя зарекомендовал в нескольких проектах (Android и Java ME).
0
Парни для этих целей есть IntentService — очередь + отдельный поток выполнения. Сервис автоматом остановится как только не будет тасков.
Для переодичных задач пользуйтес alarm менеджером. Говорите ему что бы кинул вам интент в нужный сервис и выполняете таску.
Для переодичных задач пользуйтес alarm менеджером. Говорите ему что бы кинул вам интент в нужный сервис и выполняете таску.
+1
В 3-м и наверно 4-м андроиде сетевой вызов в UI потоке и не сделаешь — вылетит исключение.
+2
а разве StrictMode не выключен по умолчанию?
0
Спасибо за статью!
Как раз гуглил инфу по данной теме, потом зашёл на хабр, а тут свежеиспечённая, готовая к употреблению статья :)
Как раз гуглил инфу по данной теме, потом зашёл на хабр, а тут свежеиспечённая, готовая к употреблению статья :)
-1
Кстати, хорошая и простая в использовании библиотека для асинхронных запросов:
loopj.com/android-async-http/
loopj.com/android-async-http/
0
Возможно это дело вкуса, но я очень не люблю эти вложенные классы. В своей задаче у меня несколько сетевых потоков, вызывающих отдельные классы реализующие Runnable и получающих в качестве аргумента конструктора экземпляр Handler. Обмен с потоком осуществляется через Message. Если в общих чертах, это выглядит так:
pastebin.com/s8FsGsEa
pastebin.com/s8FsGsEa
0
Разве в 1ом варианте нельзя использовать context#runOnUiThread(Runnable)?
+1
Спасибо за статью, но вы помимо AsyncTask и Handler забыли упомянуть о методе runOnUiThread(… )
+1
Есть еще нюанс, я по такой схеме сделал приложение, которое поллит сервер и шлет данные в гуи. Но вот гуевый компонент передавал в сервис через статическое поле, что, вероятно приводило к проблемам. Таймер (да и экзекутор) отказывался второй раз выполнять асинк таск, без каких либо эксепшинов или записей в логах.
Помучавшись пару вечеров, я сдался и написал вопрос на stackoverflow и мне порекомендовали сделать по человечески. В смысле передавать данные от сервиса к клиенту через Intent и Listener'a.
Сделал, как написал вумный дядя и сразу все прекрасно заработало. Смотреть второй ответ, у которого меньше очков.
Помучавшись пару вечеров, я сдался и написал вопрос на stackoverflow и мне порекомендовали сделать по человечески. В смысле передавать данные от сервиса к клиенту через Intent и Listener'a.
Сделал, как написал вумный дядя и сразу все прекрасно заработало. Смотреть второй ответ, у которого меньше очков.
0
Для повторяющихся задач Timer не рекомендуют использовать, для этого лучше подходит Handler.
Также можно использовать AlarmManager. Тут пример.
Также можно использовать AlarmManager. Тут пример.
0
Взгляните на WakefullIntentService — очень красивое решение бекграунд-вопросов. Не спит, выполняется в отдельном потоке, живет ровно столько, сколько нужно на выполнение поставленных в очередь задач.
0
Автор забыл упомянуть о IntentService, который предназначен именно для выполнения задач в бэкграунде
0
А что если в приложении нужно реализовать например счетчик подсчета СМС например через BroadcastReceiver? Если запустить его в Main Activity то в какой то момент андроид может освободить апликацию.
Была мысль сделать его через Service: Main Activity запускает сервис который запускает BroadcastReceiver.
Но почитав тут уже не уверен…
Буду рад услышать ваше мнение.
Была мысль сделать его через Service: Main Activity запускает сервис который запускает BroadcastReceiver.
Но почитав тут уже не уверен…
Буду рад услышать ваше мнение.
0
Сделаем так, чтобы AsyncTask из предыдущего примера выполнялся раз в минуту…
И после Вы привели код выполняющий не AsyncTask.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Выполнение задач в бэкграунде