@android_ru

Страница 53 из 3205
Nikita
15.08.2016
09:11:19
А почему не стоит использовать asynctask для активити/фрагмента?
Как я понял, там ссылка на активити и утечка памяти из-за этого

Mukhamed
15.08.2016
09:11:55
А почему не стоит использовать asynctask для активити/фрагмента?
Просто у фрагментов жизненный цикл сложный, и в некоторых моментах фрагмент может просто отвязаться от активити и приложения может крэшнуться.

Nikolay
15.08.2016
09:12:06
А почему не стоит использовать asynctask для активити/фрагмента?
Результаты могут вернуться когда активность или фрагмент убита. Ссылки - возможно, но не уверен. Если только через вьюхи.

Mukhamed
15.08.2016
09:13:17
Для скачки чего-либо лучше использовать Service?
Сервисы нужно для того, чтобы делать какие-либо задачи в фоне приложения, то есть сервисы не зависят от жизненного цикла Activity например. В качестве примера можно привести сервис для сообщений, он может работать в фоне даже когда запущено другое приложение и уведомлять о новых сообщениях

Google
Yura
15.08.2016
09:14:19
Подождите, подождите. Может я не правильно сделал. Я запускаю asynctask, передал какие-то простые параметры, не callback-и и всё, а в onPost уже (в 99% случая) - у меня есть система такая event-ов, этот эвент прилетает в активити (эвент может получить кто угодно) и уже в активити (мой наследник) смотрится, а жива активити или нет...

Mukhamed
15.08.2016
09:14:19
И да, Loaders эффективны при сменах конфигурации, т.е смена ориентации экрана и т.д

Yura
15.08.2016
09:16:59
Никаких callback у меня нет, есть система эвентов, на неё кто угодно может подписаться и отписаться, соответ. моя активити в onCreate подписывается, onDestroy отписывается и поэтому если она умрет просто к ней ничего не прилетит

Nikolay
15.08.2016
09:17:33
тогда должно все норм работать в теории.

Yura
15.08.2016
09:17:44
ну и само собой обрабатывается эвент в runOnUiThread

Yura
15.08.2016
09:18:03
я просто давно выбрал такой метод, может он и не прозрачен, зато работает хорошо

нет, самописное - есть статический класс, который подписывается, отписывается на события

Nikolay
15.08.2016
09:19:36
Самописный Observable получается?

Yura
15.08.2016
09:20:09
т.е. в этом классе я просто говорю, вот тебе callback, и если кто-то дернет interface, который реализует этот callback, ты меня вызови и уже моя головная боль, как я его обработаю

Mukhamed
15.08.2016
09:20:46
Самописный EventBus получается)

Yura
15.08.2016
09:20:47
наверно да, я просто rx никогда не пользовался

Google
Yura
15.08.2016
09:20:55
ну не совсем

я пользуюсь и Ioc

но просто, чтобы разнести определенные вещи и можно было классы использовать и в самом приложении и в java-тестах

может я что-то не допонимаю, но вроде в Ioc отписаться быстро нельзя

Nikita
15.08.2016
09:25:07
Мне кажется лоадеры в этом случае использовать удобнее

Они прозрачнее

И код чище

Nikolay
15.08.2016
09:26:17
Мне кажется лоадеры в этом случае использовать удобнее
Не согласен. Там косяки могут быть с обвязкой которая их обрабатывает и которую вообще никто не упоминает.

Nikita
15.08.2016
09:26:28
Надо будет как приду домой, с лоадерами поэкспериментировать

Mukhamed
15.08.2016
09:26:29
Просто изначально даже обычные потоки могут быть хорошим решением, так как все работает же. Но уже когда у приложения более миллиона пользователей в месяц, приходится отбросить все "и так сойдет")

Mukhamed
15.08.2016
09:27:30
Поэкспериментируй) так как у всех способов есть как и плюсы так и минусы)

Nikita
15.08.2016
09:27:46
Так что лучше? Асинктаск с эвентами?

@yshinkarev , можно ссылку на гитхаб?

Yura
15.08.2016
09:28:34
это порой сложно сделать (сразу хорошо) в силу ограниченности по времени или просто отсутствия уверенности, что проект будет продолжен и надо сделать быстро, чтобы работало (чисто пруф концепт)

Nikolay
15.08.2016
09:29:14
Все зависит от конкретной задачи.

Yura
15.08.2016
09:29:27
Никита нет, это же проект, за который мне платят деньги, я даже подписывал документ

Nikita
15.08.2016
09:29:34
Речь о том, что если у тебя есть и время и прочее

Nikolay
15.08.2016
09:29:36
Лоадеры нельзя использовать в сервисе.

Alexey
15.08.2016
09:29:43
Для скачки чего-либо лучше использовать Service?
DownloadServer есть такой системный сервис для загрузки файлов

Google
Alexey
15.08.2016
09:29:54
DownloadService

Nikita
15.08.2016
09:30:05
Alexey
15.08.2016
09:30:16
кстати почему все про него умалчивают и не используют? Есть какие-то подводные камни?

Yura
15.08.2016
09:30:25
не могу

Alexey
15.08.2016
09:31:16
Loader?
https://developer.android.com/reference/android/app/DownloadManager.html

Yura
15.08.2016
09:31:17
тем более я считаю, что если брать и использовать чужой код, то только у больших профессионалов, а я к таким не отношусь :)

Alexey
15.08.2016
09:31:47
Loader?
в системе есть сервис который специально для загрузки файлов, DownloadManager умеет ему передавать задачи на загрузку файлов

Nikita
15.08.2016
09:31:51
не могу
Ладно. По идее реализация примитивная

https://developer.android.com/reference/android/app/DownloadManager.html
А если кратковременная загрузка?

Alexey
15.08.2016
09:33:14
@LionZXY возможно тебе подойдёт DownloadManager. Отправляет файл на загрузку и в нотификейшен баре у тебя прогрес этой загрузки показывается

Mukhamed
15.08.2016
09:33:32
А если кратковременная загрузка?
Если тебе загружать данные о юзерах или какие-либо картинки чтобы в приложении использовать, то AsykTask/Loaders

Alexey
15.08.2016
09:33:41
А если кратковременная загрузка?
насколько кратковременная? что ты качаешь?

Alexey
15.08.2016
09:34:24
Ну допустим название песни
а лол, это обычная работа с сетью, с апи

Nikolay
15.08.2016
09:34:44
Retrofit мб? С асинхронными вызовами

Alexey
15.08.2016
09:34:52
AsyncTask с эвентами или Loader?
асинкТаск для этого плохо подходит

Google
Nikita
15.08.2016
09:35:32
Retrofit мб? С асинхронными вызовами
Хотелось бы не быть зависимым от сторонних библиотеки

Mukhamed
15.08.2016
09:35:59
Просто при загрузке нужно учитывать много вещей) А что если кто-то сменит ротацию экрана А что если активити уйдёт в фон В обеих случаях AsynkTask проигрывает Loadery

Alexey
15.08.2016
09:36:16
Почему?
проблемы при поворотах экранов

ну да, как Mukhamed Issa написал всё так и есть

Nikita
15.08.2016
09:36:38
проблемы при поворотах экранов
Тоесть юзать лоадеры?

А что насчет AsyncTaskLoader?

Alexey
15.08.2016
09:37:11
Тоесть юзать лоадеры?
ну сейчас юзают retrofit обычно, лоадеры когда-то использовали в принципе

Nikolay
15.08.2016
09:37:17
Запросы на загрузку последовательны или параллельны?

Mukhamed
15.08.2016
09:37:21
Это и есть Loader)

Только его вид

Alexey
15.08.2016
09:37:57
Это и есть Loader)
гибрид асинкТаска и лоадера?

Nikolay
15.08.2016
09:38:00
Тоесть юзать лоадеры?
Запросы на загрузку последовательны или параллельны?

Mukhamed
15.08.2016
09:38:40
Запросы на загрузку последовательны или параллельны?
Да там же можно одним запросом выдернуть названия всех песен)

Nikolay
15.08.2016
09:39:50
НУ зависит от реализации как бы. Может это будет наподобии как Picasso грузит для списка. Тогда Лоадеры не катят.

Nikita
15.08.2016
09:40:24
Почему не катят?

Nikolay
15.08.2016
09:41:35
Callback лоадеров. Он там по id хэндлит. С этим сложности будут. Куда и что грузить и показывать

Mukhamed
15.08.2016
09:42:56
AsyncTask Loader
Там тоже

Google
Mukhamed
15.08.2016
09:43:47
Тогда наверное Thread pool асинктасками сделать

Nikita
15.08.2016
09:44:03
Executor - обычный среад

А лоадер может несколько раз колбечить?

Nikolay
15.08.2016
09:45:30
В теории да. Но передавая каждый раз другой id

Mukhamed
15.08.2016
09:46:09
Но лучше этого не делать)

Nikita
15.08.2016
09:48:50
В один лоадер же можно засунуть много асунктасков?

Вот есть список из 1к песен

Для каждой нужно отдельно каждый раз обращаться на сервер

Что лучше использовать?

Причем с максимальным колбеком

Т.е. получил название песни - сразу отдал

Mukhamed
15.08.2016
09:53:59
Использовать thread pool с asyktask

Alexey
15.08.2016
10:03:51
@LionZXY если 1к песен, то постраничная загрузка, ты же все сразу всё равно юзеру не покажешь

Alexander
15.08.2016
11:11:14
Да все верно зачем грузить все сразу )) делай ленивую загрузку. Все что загрузил все равно в адаптаре будет закэшированно. Можно и без лоудера обойтись

И зачем вообще использовать асинктаски?

Самый просто вариант взять volley

RecyclerView + Volley

ленивую загрузку в наследник от RecyclerView.OnScrollListener

А зачем асинктаск вы как на сервер обращаться хотите ?

Страница 53 из 3205