Task, Async Task, Loader, Service
Task, Async Task, Loader, Service
Эти технологии (кроме Task и Async Task) не являются родственниками, однако они "конкурируют" в случаях, когда необходимо вывести какую-либо задачу из потока UI.
Потому возникает вопрос - что в каком случае лучше использовать?
Если есть ссылки на хорошие материалы - буду признателен.
Потому возникает вопрос - что в каком случае лучше использовать?
Если есть ссылки на хорошие материалы - буду признателен.
Arbeit macht Fry
Re: Task, Async Task, Loader, Service
И откуда такая информация? Loader и AsyncTask вообще ничем не похожи и конкурируют они в голове того, кто о них думает только по причине не понимания задачи. они по сути дополняют друг друга. Service -это вообще из другой оперы -это процесс выполняющийся паралельно с приложением и не зависящий от его состояния. То, что они все могут использоваться для выполнения одной задачи ничем их не объединяет, просто есть разные способы решения.Fry писал(а):Эти технологии (кроме Task и Async Task) не являются родственниками, однако они "конкурируют" в случаях, когда необходимо вывести какую-либо задачу из потока UI. .
Вам стоит разобраться с структурой самого android, какие существуют уровни, и на каком уровне работает сам android framework, ваше приложение не существует отдельно, оно живет в инфраструтктуре системы и является простым процессом, тот же service по сути создает новый процесс, а вот AsyncTask в контексте системы - задачу внутри процесса. Опять же Loader и AsyncTask объеденены в AsyncTaskLoader, в котором по сути реализован курсор работающий с AsyncTask по аналогии, как привычный курсор работает с базой.
Я не знаю как это можно объяснить, к тому же не все детали знаю... тут нужно гораздо более глубокое понимание жизни приложения в системе.
1. Service - это долгоживущие фоновые задачи
2. Loader и AsyncTask - для выполнения кода асинхронно/ в другом потоке, но у них абсолютно разный жизненый цикл, тот же Loader привязан с Activity/Fragments, когда AsyncTask имеет состояния, "начался" и "закончился" и все. Опять же Loader не нуждается в Handler поскольку привязан к стеку activity.
В общем по русски написать я так и не смог -это вообще разные вещи работающие принципиально по разному, а что использовать - зависит от стиля программирования и архитектуры конкретного решения.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Task, Async Task, Loader, Service
Service -это вообще из другой оперы -это процесс выполняющийся паралельно с приложением и не зависящий от его состояния.
Неверно. Если в манифесте стоит сервису параметр :remote , то только тогда, он будет создан в отдельном процессе. Если не стоит, то он будет создан в потоке UI.тот же service по сути создает новый процесс
Re: Task, Async Task, Loader, Service
правильно, просто торопясь я написал наоборот, естественно, что AsyncTask запускающий поток работает в другом процессе(я писал иначе), а сервис никогда не создает другой поток(да пока это не указанно) а наоборот аналагичен задаче. Тут важен другой момент, не важно где запущен сервис - он не должен и не взаимодействует с пользователем.m090050 писал(а):Service -это вообще из другой оперы -это процесс выполняющийся паралельно с приложением и не зависящий от его состояния.Неверно. Если в манифесте стоит сервису параметр :remote , то только тогда, он будет создан в отдельном процессе. Если не стоит, то он будет создан в потоке UI.тот же service по сути создает новый процесс
Re: Task, Async Task, Loader, Service
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Task, Async Task, Loader, Service
Не припомню такого класса как Task. Возможно вы имели ввиду TimerTask?
Если так то добавлю еще кое что к выше сказанному:
TimerTask - выполняет задачу в отдельном потоке в определенное время либо с указанной периодичностью, для выполнения используется пулл потоков. Чем-то похож на Handler только тот выполняет задачи в одном конкретном потоке.
AsyncTask - выполняет задачу в отдельном потоке, также производит это в пуле потоков, в отличии от TimerTask не может делать это в заданное время. Однако имеет специальные методы выполняемые в UI потоке, благодаря чему не нужно самостоятельно об этом заботиться. А еще AsyncTask может хранить результат в виде объекта.
Loader - как и говорилось, не конкурируют с вышеперечисленными классами. Главной особенностью лоадеров является то, что после загрузки они продолжают поддерживать загруженный объект и в случае изменений обновляют его автоматически. Одним из наглядных примеров является связка CursorLoader и ContentProvider, в этом случае не нужно заботиться об обновлении курсора, все происходит автоматически.
Про сервис добавить нечего, он вообще из другой компании.
Если так то добавлю еще кое что к выше сказанному:
TimerTask - выполняет задачу в отдельном потоке в определенное время либо с указанной периодичностью, для выполнения используется пулл потоков. Чем-то похож на Handler только тот выполняет задачи в одном конкретном потоке.
AsyncTask - выполняет задачу в отдельном потоке, также производит это в пуле потоков, в отличии от TimerTask не может делать это в заданное время. Однако имеет специальные методы выполняемые в UI потоке, благодаря чему не нужно самостоятельно об этом заботиться. А еще AsyncTask может хранить результат в виде объекта.
Loader - как и говорилось, не конкурируют с вышеперечисленными классами. Главной особенностью лоадеров является то, что после загрузки они продолжают поддерживать загруженный объект и в случае изменений обновляют его автоматически. Одним из наглядных примеров является связка CursorLoader и ContentProvider, в этом случае не нужно заботиться об обновлении курсора, все происходит автоматически.
Про сервис добавить нечего, он вообще из другой компании.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Task, Async Task, Loader, Service
Сори, ошибся. Я имел в виду Thread + Handler.KamiSempai писал(а):Не припомню такого класса как Task..
Давайте на примерах.Loader - как и говорилось, не конкурируют с вышеперечисленными классами. Главной особенностью лоадеров является то, что после загрузки они продолжают поддерживать загруженный объект и в случае изменений обновляют его автоматически.
В чем бы вы реализовали соединение с использованием HttpURLConnection с последующим распарсиванием XML/Json? Результаты возвращаются во фрагмент.
Я это делаю в асинхронном потоке, но возникли сомнения, правильно ли это.
Arbeit macht Fry
Re: Task, Async Task, Loader, Service
посмотри исходники AsyncTask - это и есть обертка над Thread + HandlerFry писал(а):Сори, ошибся. Я имел в виду Thread + Handler.KamiSempai писал(а):Не припомню такого класса как Task..
Я бы реализовал это в Volley ^^Fry писал(а): В чем бы вы реализовали соединение с использованием HttpURLConnection с последующим распарсиванием XML/Json? Результаты возвращаются во фрагмент.
см. http://habrahabr.ru/post/188860/
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Task, Async Task, Loader, Service
Давайте не будем в 100 -ый раз повторять одно и то же. Существуют тысячи строк кода от google/Apache и т.д. демонстрирующие как оно работает. Можно посмотреть к примеру очень популярную библиотеку: http://square.github.io/retrofit/, можно изучить, как это делает google: https://github.com/android, можно посмотреть на другую реализацию: https://github.com/vgevorgyan/android-async-new-http или: https://code.google.com/p/basic-http-client/Fry писал(а):
Давайте на примерах.
В чем бы вы реализовали соединение с использованием HttpURLConnection с последующим распарсиванием XML/Json? Результаты возвращаются во фрагмент.
Я это делаю в асинхронном потоке, но возникли сомнения, правильно ли это.
Суть простая, ваша задача - отправить запрос, получить ответ, разобрать, что кроме AsyncTask вы можете использовать? Зачем?
Re: Task, Async Task, Loader, Service
а мне retrofit больше нравится... лучше бы конечно AndroidAnotation, но оно в rest вусь spring тянет вот хочу попробывать расхваленный: http://droidparts.org/anber писал(а): Я бы реализовал это в Volley ^^
см. http://habrahabr.ru/post/188860/
Re: Task, Async Task, Loader, Service
[ОФФТОП]меня если честно очень часто вводят в ступор подобные решения и вопросы возникающие при решении задач разработки под Android ...И все больше начинаю "любить" iOS, который так не нравился "забитыми" стандартами... а еще больше, когда вижу, как иногда не просто пролезть в AppStore глядя на то, что творится в google play.... Там все просто, есть принятый стандарт юзабилити и типовые layout - не соотвествуешь == вали Есть огромные ресурсы кода от apple и вообще не возникает вопросов или желания искать что то другое на github...
Последний раз редактировалось altwin 29 янв 2014, 15:03, всего редактировалось 1 раз.
Re: Task, Async Task, Loader, Service
То есть советуете стороннюю либу использоваться?..
А что по поводу Robospice https://github.com/octo-online/robospice скажите?
А что по поводу Robospice https://github.com/octo-online/robospice скажите?
Arbeit macht Fry
Re: Task, Async Task, Loader, Service
для начала можно просто посмотреть, как они это делают. Я ей не пользовался но суть у них всех одна, просто по разному классы называются и часто разный функционал, тот же DroidParts помимо работы с rest умеет еще очень много всего и весит очень мало.Fry писал(а):То есть советуете стороннюю либу использоваться?..
А что по поводу Robospice https://github.com/octo-online/robospice скажите?
Кстати Robospice похоже тоже spring android использует для разбора json и перегоня в POJO, но вообще подробно не смотрел на него, что то не впечатлил
Re: Task, Async Task, Loader, Service
Вопрос стоял так "В чем бы вы реализовали соединение?".Fry писал(а):То есть советуете стороннюю либу использоваться?..
А что по поводу Robospice https://github.com/octo-online/robospice скажите?
Вообще несколько недальновидно реализовывать соединение с помощью сторонней либы не зная как работают стандартные средства, не правда ли?
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Task, Async Task, Loader, Service
anber, та ты же сам либу в ответ посоветовал. )
Я хочу сначала разобраться с технологиями, а затем узнать, что лучше всего использовать, чтобы каждый раз не использовать велосипед для типовых задач.
Я хочу сначала разобраться с технологиями, а затем узнать, что лучше всего использовать, чтобы каждый раз не использовать велосипед для типовых задач.
Arbeit macht Fry
Re: Task, Async Task, Loader, Service
Либа хорошая, да. Но все-таки, прочитай мой предыдущий пост.Fry писал(а):anber, та ты же сам либу в ответ посоветовал. )
Я хочу сначала разобраться с технологиями, а затем узнать, что лучше всего использовать, чтобы каждый раз не использовать велосипед для типовых задач.
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Task, Async Task, Loader, Service
Расскажу маленькую историю.
Решил разработчик Джо сделать приложение, и думает что выбрать:
AcyncTask простая до безобразия, там что-то сломать очень тяжело, но придется переутомиться и написать 3-4 лишних сточки кода.
Поэтому решил Джо заюзать чудную либу, которая делает все сама.
Сделали проект, проетстировали, отметили релиз, отправляют заказчику - и оказывается что на реальном сервера она выдает неправильный результат и хрен его знает почему. Либа сложная и хрен в ней разберешься что там не работает, может объявили неправильно, может флаг какой-нибудь не указали.
А заказчик злится, требует чтоб исправили и быстро, грозит уволить.
И сидит наш Джо, седеет над этой чудной либой и матерится - времени чтоб все поменять на простой и понятный AcyncTask нету, как исправить неизвестно, остается только медитировать над кодом в надежде что он придумает какой-нибудь костыль который заставит эту чортову либу работать, в очередной раз отстрочить срок у заказчика "на завтра", и забухать.
Решил разработчик Джо сделать приложение, и думает что выбрать:
AcyncTask простая до безобразия, там что-то сломать очень тяжело, но придется переутомиться и написать 3-4 лишних сточки кода.
Поэтому решил Джо заюзать чудную либу, которая делает все сама.
Сделали проект, проетстировали, отметили релиз, отправляют заказчику - и оказывается что на реальном сервера она выдает неправильный результат и хрен его знает почему. Либа сложная и хрен в ней разберешься что там не работает, может объявили неправильно, может флаг какой-нибудь не указали.
А заказчик злится, требует чтоб исправили и быстро, грозит уволить.
И сидит наш Джо, седеет над этой чудной либой и матерится - времени чтоб все поменять на простой и понятный AcyncTask нету, как исправить неизвестно, остается только медитировать над кодом в надежде что он придумает какой-нибудь костыль который заставит эту чортову либу работать, в очередной раз отстрочить срок у заказчика "на завтра", и забухать.
Последний раз редактировалось anber 29 янв 2014, 18:36, всего редактировалось 2 раза.
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Task, Async Task, Loader, Service
Какая печальная история
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Task, Async Task, Loader, Service
anber
Как я тебя понимаю, проходили такое уже =)
Как я тебя понимаю, проходили такое уже =)
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Task, Async Task, Loader, Service
вот вот, новичек часто выбирает стороннюю библиотеку лишь потому, что там уже все "красиво", а как сделать такое самому не знаю, и это проблема... На сколько я заметил для себя написать что то самому, пусть и очень сложное, предварительно потратив неделю на research на много легче, чем разобраться в чужом коде. Особенно когда, как бывает в 80% случаев, этот "чужой" сам не до конца понимает, что сделал и большую часть решений взял со stackoverflow.
P.S. наверно стоит заметить, что не совсем "новичку" пришедшему из мира web разработки стоит в первую очередь понять, что использование в проекте java библиотеки - это не то же самое, что подключение плагина из jQuery. java - это строго типизированный язык, тут нельзя работать по принципу "не важно как оно работает, главное, что работает", когда завтра оно работать не захочет, с таким подходом вы будете абсолютно беззащитны.
P.S. наверно стоит заметить, что не совсем "новичку" пришедшему из мира web разработки стоит в первую очередь понять, что использование в проекте java библиотеки - это не то же самое, что подключение плагина из jQuery. java - это строго типизированный язык, тут нельзя работать по принципу "не важно как оно работает, главное, что работает", когда завтра оно работать не захочет, с таким подходом вы будете абсолютно беззащитны.