Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
67 / 43 / 5
Регистрация: 24.08.2013
Сообщений: 678

Работа с AsyncTask

18.09.2013, 09:35. Показов 1394. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Попробовал использовать AsyncTask и возник вопрос.
У меня есть несколько ф-й, которые парсят текстовые файлы и заполняют таблицы БД.
Сейчас они выполняются в одном потоке (последовательность выполнения не важна):
LoadData1();
LoadData2();
LoadData3();
LoadData4();
LoadData5();
Но как теперь разместить эти ф-ции в отдельном потоке?
В голову приходит только два варианта. Или создавать столько классов AsyncTask, сколько у меня ф-й заполнения или пихать всё содержимое этих ф-й в один doInBackground().
Ни то, ни другое мне не нравится. Наверное еще можно выполнять все ф-ции из doInBackground(), но тогда вызывать publishProgress() можно будет только между ними.
Может есть более удобный способ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.09.2013, 09:35
Ответы с готовыми решениями:

Работа с Picasso в Asynctask
Есть приложение , нужно вывести изображение на imageview из интернета (решил юзать picasso ибо проще) .Есть как минимумм 2...

Работа с потоками (AsyncTask)
Здравствуйте. Мне нужно отослать post запрос на сервер, но так как грузить GUI нельзя (что и логично) - обволакиваю весь код работы с...

AsyncTask ,некорректная работа при передаче параметров
Добрый вечер. Опять столкнулся с проблемой, не понимаю как нужно передать правильно переменные между методами класса AsyncTask. Есть один...

9
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
18.09.2013, 09:47
Цитата Сообщение от Slon747 Посмотреть сообщение
Ни то, ни другое мне не нравится.
почему?
0
67 / 43 / 5
Регистрация: 24.08.2013
Сообщений: 678
18.09.2013, 09:51  [ТС]
Цитата Сообщение от verylazy Посмотреть сообщение
почему?
Очень громоздко
0
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
18.09.2013, 10:25
каждую функцию выполняйте в отдельном doInBackground, чтоб небыло громоздко создайте менеджер:
Вот отличная статья
http://habrahabr.ru/post/114570/
1
41 / 41 / 0
Регистрация: 26.05.2013
Сообщений: 160
18.09.2013, 10:26
Создайте один asynctask и последовательно выполняйте каждую функцию в новом экзепляре асинха.
1
67 / 43 / 5
Регистрация: 24.08.2013
Сообщений: 678
18.09.2013, 13:25  [ТС]
Цитата Сообщение от Gabberr Посмотреть сообщение
каждую функцию выполняйте в отдельном doInBackground, чтоб небыло громоздко создайте менеджер:
Вот отличная статья
http://habrahabr.ru/post/114570/
Цитата Сообщение от haribo Посмотреть сообщение
Создайте один asynctask и последовательно выполняйте каждую функцию в новом экзепляре асинха.
Спасибо. Почитаю и попробую.

Добавлено через 2 часа 54 минуты
Попробовал я сделать с помощью AsyncTaskManager по статье http://habrahabr.ru/post/114570/.
Скачал пример и применил у себя.
По идее данный код должен выполнить процедуру decompressFromZip() в отдельном потоке:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
 
// Create manager and set this activity as context and listener
mAsyncTaskManager = new AsyncTaskManager(this, this);
// Handle task that can be retained before
mAsyncTaskManager.handleRetainedTask(getLastNonConfigurationInstance());
}
 
public void onRunButtonClick(View view) {
         //Create and run task and progress dialog
        mAsyncTaskManager.setupTask(new Task(decompressFromZip()));
    }
Но выполняется в след. порядке:
decompressFromZip() в основном потоке
Task()
doInBackground()

Скажите, что может быть не так?
0
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
18.09.2013, 13:36
Потому что вы на вход подаете функцию, сперва она выполняется в основном потоке, потом создается новый таск.
Измените конструктор класса Task, и в зависимости от того что подали на вход таску - в doInBackgroung выполняйте одну из своих функций.
1
67 / 43 / 5
Регистрация: 24.08.2013
Сообщений: 678
18.09.2013, 15:15  [ТС]
Цитата Сообщение от Gabberr Посмотреть сообщение
Потому что вы на вход подаете функцию, сперва она выполняется в основном потоке, потом создается новый таск.
Измените конструктор класса Task, и в зависимости от того что подали на вход таску - в doInBackgroung выполняйте одну из своих функций.
Понял. Спасибо.
0
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
18.09.2013, 15:29
в карму если можно
1
67 / 43 / 5
Регистрация: 24.08.2013
Сообщений: 678
19.09.2013, 09:06  [ТС]
Цитата Сообщение от Gabberr Посмотреть сообщение
в карму если можно
Забыл. Сделал

Добавлено через 1 час 32 минуты
Цитата Сообщение от Gabberr Посмотреть сообщение
Потому что вы на вход подаете функцию, сперва она выполняется в основном потоке, потом создается новый таск.
Измените конструктор класса Task, и в зависимости от того что подали на вход таску - в doInBackgroung выполняйте одну из своих функций.
И всё таки на получается.
Сделал по минимуму:
Java
1
2
3
4
5
mAsyncTaskManager.setupTask(new Task());
 
public Task() {
    MyFunction();
}
MyFunction() выполняется в общем потоке.
Я могу, конечно, положить MyFunction() прямо в doInBackgroung(), но в чем тогда будет преимущество перед классическим использованием AsyncTask я так и не понял.
И еще подскажите пожалуйста, как в этом случае можно сделать вывод % текущего процесса, если цикл у меня в MyFunction()

Добавлено через 15 часов 58 минут
Не подскажете ли, как вызывая функции из doInBackgroung(), показывать процесс работы в процентах, если циклы внутри функций?
Или придется класть всё содержимое ф-й в doInBackgroung()?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.09.2013, 09:06
Помогаю со студенческими работами здесь

AsyncTask
Здравствуйте, при использовании двух одинаковых методов получается разный результат. AsyncTask в одном случае успешно передает данные в...

AsyncTask
Привет. Знаю, что в AsyncTask doInBackground() обращатся к компонентам UI нельзя. Когда я пытаюсь обновить вывод (в EditText) в...

AsyncTask
Здавствуйте! У меня такой вопрос как вытащить переменную из AsyncTask в основной поток. public class MainActivity extends Activity {...

AsyncTask и get()
Создаю асинхронный процесс, где в onPreExecute() запускаю анимированный ProgressDialog. После выполнения задачи нужно выполнить действия....

AsyncTask
Использую AsyncTasc class MyT extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void......


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Подключение 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 - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru