Android использует Parcelable для отправки данных между действиями - PullRequest
1 голос
/ 01 февраля 2012

В моем приложении я хочу передать ArrayList из Parcelable объектов (или Parcelable[]) между двумя действиями. На первом занятии я вызываю restservice для получения данных json, после чего я использую gson для получения объекта List из Parcelable, а затем отправляю список на второе занятие, используя putParcelableArrayListExtra(...). Все работает нормально, пока размер списка не составит около 1000, но при этом размере я получаю ANR, и приложение не возобновляет работу, даже если я подожду несколько минут.

Есть ли решение этой проблемы, поддерживающее этот подход? Это связано с ограничением размера объекта, помещаемого в намерение?

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

1 Ответ

0 голосов
/ 02 февраля 2012

Прежде всего, убедитесь, что источник вашего ANR действительно является крупным объектом, подлежащим продаже, а не потому, что вы выполняли операцию блокировки (т. Е. Сетевое взаимодействие) в главном потоке.

Теперь, если проблема ANR действительно связана с этими большими объектами, правильный способ сделать это - десериализовать объект и записать его в хранилище вместо передачи его между действиями. Вы фактически удваиваете объем памяти, которую делаете, делая то, что делаете.

Вот несколько способов устранения неполадок:

  • StrictMode: StrictMode чаще всего используется для обнаружения случайного доступа к диску или сети в главном потоке приложения, где принимаются операции пользовательского интерфейса и происходят анимации. Сохраняя отзывчивость основного потока вашего приложения, вы также предотвращаете показ диалогов пользователям ANR.

  • Traceview: Traceview - это графическое средство просмотра журналов, созданных приложением Android. Через Traceview вы можете найти ошибки в вашем приложении и измерить его производительность.

  • Дамп памяти: Вы можете создать снимок памяти и проанализировать его с помощью анализатора памяти Eclipse.

...