#java #android #многопоточность
Сабж. Произвожу парсинг страницы и добавляю некие элементы парсинга в ListView. Процесс занимает ~1-2 секунды. Так вот, в этот промежуток, ~1-2секунды, все приложение никак не реагирует (виснет, пока все элементы не будут добавлены в листвью). Вопрос: как этого избежать?
Ответы
Ответ 1
Вам повезло, что процесс парсинга у вас занимает 1-2 секунды. Если бы 5 то система показала бы ANR-диалог. Вообще категорически нельзя в UI-потоке делать какие-то "длинные" вычисления (работа с БД, работа с сетью, whatever...), вообще. Теперь по вопросу: вам поможет внедрение AsyncTask-ов. Подробнее можно почитать здесьОтвет 2
Сам парсинг занимает столько или добавление? Или у Вас добавление идет в процессе парсинга? Если элементов много лучше создать adapter и вычислять элементы списка когда они понядобятся. Либо вычислить массив в потоке, потом его передать через ArrayAdapter в ListView. По поводу потоков, объявляем класс наследник Thread, перекрываем метод run(). дальше в основном потоке создаем экземпляр и запускаем start(). Пока поток не отработает можно вывести диалог please wait. В документации по андроиду есть примеры с потоками, да и в сети их полно...Ответ 3
Возможный вариант - это запуск службы: public class CustomService extends IntentService { public CustomService () { super("CustomService"); } public CustomService(String name) { super(name); } @Override protected void onHandleIntent(Intent arg0) { // TODO: Выполнить длительную работу } } и где-то в коде Intent i = new Intent(this, CustomService.class); startService(i);
Комментариев нет:
Отправить комментарий