Форум программистов, компьютерный форум CyberForum.ru

Вылет при выролнении объемной задачи в AsyncTask - Android

Войти
Регистрация
Восстановить пароль
 
Alexvp
107 / 71 / 8
Регистрация: 03.08.2014
Сообщений: 344
19.08.2014, 23:24     Вылет при выролнении объемной задачи в AsyncTask #1
Добрый день,

Столкнулся с одной проблемой и не пойму с какой стороны искать решение.
Приложение при первоначальном запуске конфигурируется исходя из характеристик аппарата пользователя. Процесс большой, поэтому выполняется в AsyncTask. При небольших объемах задачи все работает отлично. Но при увеличении объема и, следовательно, времени обработки, происходит вылет.
Задача это открытие текстовых файлов и разбиение их на страницы вывода в зависимости от размеров экрана. Описание каждой страницы сохраняется в таблице базы данных.
Вот лог с ошибками:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
08-19 15:14:13.535: W/ResourceType(935): No package identifier when getting value for resource number 0x00000000
08-19 15:14:13.555: W/dalvikvm(935): threadid=11: thread exiting with uncaught exception (group=0xb3ad7ba8)
08-19 15:14:13.575: E/AndroidRuntime(935): FATAL EXCEPTION: AsyncTask #1
08-19 15:14:13.575: E/AndroidRuntime(935): Process: com.test.111, PID: 935
08-19 15:14:13.575: E/AndroidRuntime(935): java.lang.RuntimeException: An error occured while executing doInBackground()
08-19 15:14:13.575: E/AndroidRuntime(935):  at android.os.AsyncTask$3.done(AsyncTask.java:300)
08-19 15:14:13.575: E/AndroidRuntime(935):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
08-19 15:14:13.575: E/AndroidRuntime(935):  at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
08-19 15:14:13.575: E/AndroidRuntime(935):  at java.util.concurrent.FutureTask.run(FutureTask.java:242)
08-19 15:14:13.575: E/AndroidRuntime(935):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
08-19 15:14:13.575: E/AndroidRuntime(935):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
08-19 15:14:13.575: E/AndroidRuntime(935):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
08-19 15:14:13.575: E/AndroidRuntime(935):  at java.lang.Thread.run(Thread.java:841)
08-19 15:14:13.575: E/AndroidRuntime(935): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0
08-19 15:14:13.575: E/AndroidRuntime(935):  at android.content.res.Resources.getValue(Resources.java:1123)
08-19 15:14:13.575: E/AndroidRuntime(935):  at android.content.res.Resources.openRawResource(Resources.java:1038)
08-19 15:14:13.575: E/AndroidRuntime(935):  at android.content.res.Resources.openRawResource(Resources.java:1015)
08-19 15:14:13.575: E/AndroidRuntime(935):  at com.test.111.LoadActivity$CountPages.doInBackground(LoadActivity.java:210)
08-19 15:14:13.575: E/AndroidRuntime(935):  at com.test.111.LoadActivity$CountPages.doInBackground(LoadActivity.java:1)
08-19 15:14:13.575: E/AndroidRuntime(935):  at android.os.AsyncTask$2.call(AsyncTask.java:288)
08-19 15:14:13.575: E/AndroidRuntime(935):  at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-19 15:14:13.575: E/AndroidRuntime(935):  ... 4 more
Подскажите, в чем может быть причина вылетов?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2014, 23:24     Вылет при выролнении объемной задачи в AsyncTask
Посмотрите здесь:

Вылет приложения при работе с jsoup Android
Запуск AsyncTask при повороте девайса Android
Progressdialog при выполнении asynctask Android
Android Вылет приложения при использования бокового меню. О чем говорят логи
Вылет при переходе на второй активити Android
Android Как реализовать Синхронное выполнение двух функций при вызове AsyncTask
Непонятный вылет приложения при установки значения в NumberPicker Android
Вылет при нажатии кнопки Android
Android Canvas-игра. Вылет при сворачивании
Подскажите у кого происходит вылет при переходе на Activity Android
TextWatcher. При добавлении в проект вылет Android
Вылет при фотографировании Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ILNAR_93
Android
212 / 212 / 21
Регистрация: 19.01.2013
Сообщений: 1,528
Записей в блоге: 2
20.08.2014, 08:06     Вылет при выролнении объемной задачи в AsyncTask #2
попробуй

Project > Clean

и попробуй компилировать.

Добавлено через 3 минуты
Но наверняка ошибка в коде,

он не может найти ресурс

Добавлено через 44 секунды
может проблема в фале R.java ?
Alexvp
107 / 71 / 8
Регистрация: 03.08.2014
Сообщений: 344
20.08.2014, 09:15  [ТС]     Вылет при выролнении объемной задачи в AsyncTask #3
Проверял на реальном устройстве и на эмуляторе в версиях от 2.3.3 до 4.4 везде одно и тоже - при числе текстовых файлов меньше 15 все работает отлично, поэтому не думаю, что в коде есть ошибка.
Алгоритм работы таков - при первоначальном запуске приложение читает файл конфигурации в формате xml, где перечислены все части книги и имена файлов, где эти части расположены. Имена файлов сохраняются в массиве. doInBackground в цикле берет из этого массива очередное имя файла, считывает содержимое и разбивает на страницы. Так как doInBackground до 15 файлов обрабатывает их корректно, то пока считаю, что его код не содержит ошибок.
Массив формируется таким кодом:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    String[] Files;
    String[] TitleChapter;
 
    private void loadpartsbook() {
        // загрузка списка частей (глав) книги
    // в начале определяем сколько всего частей     
        int len = 0;
        try {
            XmlPullParser parser = getResources().getXml(R.xml.bookparts);
            while (parser.getEventType()!= XmlPullParser.END_DOCUMENT) {
                if (parser.getEventType() == XmlPullParser.START_TAG && parser.getName().equals("part")) {
                    len++;
                }
                parser.next();
            }
        }
        catch (Throwable t) {
        }
       // создаем массивы
        String[] itemid = new String[len];
        String[] partname = new String[len];
        String[] filepart = new String[len];
        int m=0;
 
         try {
                XmlPullParser parser = getResources().getXml(R.xml.bookparts);
                while (parser.getEventType()!= XmlPullParser.END_DOCUMENT) {
                    if (parser.getEventType() == XmlPullParser.START_TAG && parser.getName().equals("part")) {
                        itemid[m] = parser.getAttributeValue(0);
                        partname[m] = parser.getAttributeValue(1);
                        filepart[m] = parser.getAttributeValue(2);
                        m++;
                    }  
                        parser.next();
                }   
            }
            catch (Throwable t) {
            }
             // сохраняем созданные массивы в общих переменных для дальнейшей обработки
         Files = filepart;
         TitleChapter = partname;
    }
На свой взгляд ошибок не вижу. Могу выложить код AsyncTask, но он очень объемный

Добавлено через 31 минуту
Упс... как говорится, утро вечера мудренее Стал перепроверять файл конфигурации и увидел опечатку
Yandex
Объявления
20.08.2014, 09:15     Вылет при выролнении объемной задачи в AsyncTask
Ответ Создать тему
Опции темы

Текущее время: 11:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru