2012-01-05 4 views
0

Я разрабатываю многопоточное приложение, которое использует как потоки, так и задачи Async для выполнения кода на нескольких потоках.Ошибка Android на многоядерных процессорах

У меня есть AsyncTask, который добавляет строку в базу данных и затем отправляет запрос API. После получения ответа на запрос API он обновляет строку в базе данных. Объект адаптера базы данных передается в AsyncTask из потока пользовательского интерфейса.

К сожалению, AsyncTask не работает на многоядерных устройствах (таких как Asus Transformer). Исключение нулевого указателя возникает, когда я пытаюсь добавить строку в базу данных в первый раз.

Я не знаю, почему это происходит, но это может быть связано с тем, что говорится в docs в разделе «Наблюдение за памятью».

+2

Пожалуйста, разместите код, где появляется ошибка, иначе нам не будет известно, что происходит. – Tudor

+7

Если вы не делаете что-то странное, не должно быть разницы в многоядерных устройствах. Вы просто имеете дело с потоками, а vm имеет дело с ядрами. Скорее всего, ваш тестовый телефон просто быстро, и вы попадаете в состояние гонки, которое вы не встречаете на более медленных телефонах. –

+0

Если это помогает сузить проблему, у меня есть многоядерный телефон и использовать AsyncTask для запуска нескольких параллельных потоков в моем приложении, но у вас нет проблем. – Pedantic

ответ

1

Спасибо за комментарии ребята.

Получается, что у меня было состояние гонки. Я не понимал, что onActivityResult был вызван до onResume, и поэтому оказалось, что на более медленных телефонах выполняемая задача будет выполняться после вызова onResume (и, таким образом, база данных была открыта), но на более быстрых телефонах выполняемая задача сначала будет работать с базой данных и быть встречен с NPE.

Спасибо!

Смежные вопросы