Ошибка Android на многоядерных процессорах - PullRequest
0 голосов
/ 05 января 2012

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

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

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

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

1 Ответ

1 голос
/ 08 января 2012

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

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

Спасибо!

...