|
2 / 2 / 0
Регистрация: 07.01.2015
Сообщений: 26
|
|
AsyncTask тормозит17.02.2016, 12:50. Показов 3043. Ответов 25
Метки нет (Все метки)
Подскажите пожалуйста, делалю загрузку данных с сервера через asyncTask и возвращаются результат, а дальше делаю обработку этих данных во фрагменте, в приложении всего три таба, загрузка данных происходит в последнем табе, так вот, если нажимаешь на табу где происходит запрос к asyncTask приложение немного притормаживает пока эти данные не загрузятся.
После возврата данных в формате json они циклом помещаются в массив и выводятся через spinner на экран. По какой причине может происходить подлагивание приложения? Добавлено через 24 минуты Прочитал про хендлер появилось подозрение что томозит потому что цикл это для андроид тяжёлый код и его тоже нужно поместить в отдельный поток, я правильно понимаю?
0
|
|
| 17.02.2016, 12:50 | |
|
Ответы с готовыми решениями:
25
AsyncTask AsyncTask и get() |
|
2 / 2 / 0
Регистрация: 07.01.2015
Сообщений: 26
|
||||||
| 17.02.2016, 13:56 [ТС] | ||||||
|
YuraAAA,
YuraAAA, Я понял почему мой поток блокирует, так как чтоб получить результат я вызывают метод get, а он пока ждёт блокирует мой UI пока не получит результат. Правильно?
0
|
||||||
|
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
|
|
| 17.02.2016, 13:59 | |
|
этот таск вообще что-то и куда-то возвращает или я невнимательно смотрю?
0
|
|
|
2 / 2 / 0
Регистрация: 07.01.2015
Сообщений: 26
|
||||||
| 17.02.2016, 14:54 [ТС] | ||||||
|
Паблито,
Наверное) Я написал что я методом get во фрагменте получаю результат который приходит с сервера
Я думаю что тормоза из-за того что метод get блокирует мой ui, я прав?
0
|
||||||
|
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
|
|
| 17.02.2016, 15:15 | |
|
да, я видел насчет get
но это извращение, по-хорошему надо любым способом передавать в асинктаст ссылку на активити или фрагмент и когда таск отработает - возвращать результат из метода onPostExecute
0
|
|
|
2 / 2 / 0
Регистрация: 07.01.2015
Сообщений: 26
|
|
| 17.02.2016, 15:26 [ТС] | |
|
Паблито,
Можно пример А что если у меня этот результат каждый раз разный, я не думаю что для всех задач нужно делать отдельный asyncTask? Просто до этого писал на php и привык что у меня есть определённый класс который отвечает за одну задачу и который должен что-то вернуть, а уже с результатом я делаю что мне нужно. Так как в данном случае asyncTask может вернуть массим json или объект или строку а может число, как быть в такой ситуации?
0
|
|
|
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
|
|
| 17.02.2016, 16:14 | |
|
если на сервере вменяемое API то асинктаск можно написать так, что ему на вход подается url, а он будет
получать json и парсить его сразу в объект, например MyCoolResponse response; потом этот объект возвращается в активити и там уже принимается решение что с ним делать а когда задача стоит так - у меня там х.з. что может вернуться из асинктаска, то далеко так не уехать и тут бесполезно спрашивать готовый код как тут любят делать, рано еще просить готовый код
0
|
|
|
2 / 2 / 0
Регистрация: 07.01.2015
Сообщений: 26
|
|
| 17.02.2016, 16:39 [ТС] | |
|
Паблито,
Мне готовый код не нужен, мне нужен совет знающего человека чтоб он сказал как правильно сделать так как java я только начинаю учить, а так как это строготипизированый язык не то что php у меня возникают некоторые сложности с освоением. И если я прошу помощи это не значит что писать нужно за меня, это значит что нужно подсказать как это правильно сделать и может быть показать пример или дать ссылку так как я думаю я не первый кто задаёт такой вопрос, и последние я могу просто не знать как спросить у гугла то что мне нужно. А не помогать людям которые просят помощи это жлобство и я не понимаю для чего тогда делать форум если все ответы сводятся к тому что или нет ответа или он типо такого содержание "ты что гуглом пользоваться не умеешь?" тогда у меня встречный вопрос, зачем этот форум? Я когда учил php у меня было не меньше вопросов но с их решением было немного проще взять хотя бы док. Он на русском языке, кто-то может сказать так выучи, так может мне тогда изучить что такое электричество если мне нужно всего лишь провод поменять? Я не хочу никого обидить, ну раз уж вы сидите на этом форуме и знаний у вас больше чем у другого, помогите ему, земля ведь круглая!
0
|
|
|
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
|
||||||||||||||||||||||
| 17.02.2016, 16:59 | ||||||||||||||||||||||
|
пример таска
в примере возвращается String но я выше писал, что лучше что бы в таске json парсился в объект, и в cakkback возвращается готовенький POJO класс, а не строка над которой потом еще надо попотеть
1
|
||||||||||||||||||||||
|
2 / 2 / 0
Регистрация: 07.01.2015
Сообщений: 26
|
||||||
| 17.02.2016, 17:21 [ТС] | ||||||
|
Паблито, Спасибо, не сложно ведь, правда?)
0
|
||||||
|
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
|
||
| 17.02.2016, 17:34 | ||
|
0
|
||
|
2 / 2 / 0
Регистрация: 07.01.2015
Сообщений: 26
|
|
| 17.02.2016, 18:59 [ТС] | |
|
Паблито,
В теории да, на практике ещё не пообовал, пока нет ПК рядом, а так мне нужно добавить ещё интерфейс в asyncTask который будет возвращать мне мои данные, в фрагменте сделать наследование от мего asyncTask класса там где я делаю вызов передать ещё параметр this, я так понимаю это и есть та самая ссылка о которой вы писали выше, в asyncTask нужно ещё добавит в конструктор callback правда мне не понятно пока что это, и в фрагменте дописать ещё один метод куда будут возвращается мои данные только после того как они будут получины. Я все правильно понял?
0
|
|
|
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
|
|||||||||||||
| 17.02.2016, 19:25 | |||||||||||||
|
1. есть фрагмент и есть отдельный класс - наследник асинктаска 2. в асинктаске (в принципе можно и отдельно, но так компактнее) объявляем интерфейс 3. когда мы создаем асинктаск - в конструктор подаем некий объект, этот объект должен уметь получить результат от асикнтаска. Как? Он должен реализовать метод интерфейсаиз асинктаска. В примере этот объекст - фрагмент. И если таск стартуем из фрагмента то и передаем this. Короче интерфейс нужен что бы асинктаск мог вернуть результат. Вопрос - куда вернуть, кому? Вот "кому вернуть результат" и есть переменная callback, ну такое название, назови ее kuda_perezvonit, если так будет понятнее. Добавлено через 17 минут вот примерно так выглядел бы код doInBackground()
0
|
|||||||||||||
|
2 / 2 / 0
Регистрация: 07.01.2015
Сообщений: 26
|
|
| 18.02.2016, 18:46 [ТС] | |
|
Паблито,
Получилось сделать на твоём премере, но для этого мне пришлось сделать три отдельных класса асинктаск для каждого спиннера и для таблици, теперь все работает ничего не тормозит да и во фрагменте стало почище.
0
|
|
|
Автор FAQ
644 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
|
|||||||||||
| 18.02.2016, 19:02 | |||||||||||
|
Необязательно делать 3, это по-нубски, можно сделать 1 универсальный:
PostExecuteData - пример моего класса с данными
0
|
|||||||||||
|
2 / 2 / 0
Регистрация: 07.01.2015
Сообщений: 26
|
|
| 18.02.2016, 22:33 [ТС] | |
|
REALIST07,
Да я знаю что копия кода это плохо, но из за того что у меня мало знаний по java я не знаю что куда приходит и уходит или что конкретно нужно передать, как бы я не совсем не соображаю кое что понятно так как программирование учил. Например взять this в php это означает этот объект, тут я не могу понять так как иногда при передачи this в качестве параметра он может подсвечивается как не правильный параметр, ещё мне не понятно пока с областью видимости в php например если переменная созданная приват (например) её видно во всем классе и без разници в каком методе, а тут совсем по другому, переменную не видно например в обработчика выбора spinner и т.д. Добавлено через 1 минуту В общем нужно пройти азы по java)
0
|
|
|
2 / 2 / 0
Регистрация: 07.01.2015
Сообщений: 26
|
||||
| 19.02.2016, 06:36 [ТС] | ||||
|
REALIST07,
Ещё раз пересмотрел код, и вроде как тучи начинают рассеиваться) Только есть пару вопросов
Ну а так в принципе все ясно) создаётся один асинктаск что-то делает, а результат возвращает вот этому классу PostExecuteData в этом классе есть метод который возвращает результат асинктаск. Правильно?
0
|
||||
|
Автор FAQ
644 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
|
|
| 19.02.2016, 20:34 | |
|
Да, это я выдрал из своего кода, свои задачи передавайте как int method = 0,1,2 и в кейсе делайте, что вам нужно и возвращайте результат
0
|
|
| 19.02.2016, 20:34 | |
|
Помогаю со студенческими работами здесь
20
AsyncTask Отмена AsyncTask AsyncTask+CheckBox Exception в AsyncTask AsyncTask ObjectAnimator Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
|
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|