2013-06-17 5 views
0

Я публикую двуязычное приложение для словарей (https://play.google.com/store/apps/details?id=com.akkzrt.szotarhude012013a), оба языка с более чем 130 000 заглавных слов. При запуске программы я предварительно загружаю данные в два массива ArrayAdapters из двух текстовых файлов utf-8, хранящихся в папке с ресурсами, затем я устанавливаю первый адаптер в свой единственный ListView. В верхней части этого ListView у меня есть кнопка для перехода на другой адаптер (назад и вперед). Я тестировал некоторые устройства (samsung galaxy mini, asus tf201, samsung galaxy s 1 и 2, lg nexus 4, samsung galaxy nexus), и все прошло хорошо.Android ListView с большим количеством данных - ошибка из памяти

Тогда один пользователь пришел ко мне со своим Sony Ericsson Experia MK16i. Он жаловался, что приложение не запускалось для него, просто загрузилось в течение долгого времени, а затем исчерпало память. На моей странице администратора разработчика Google Play у меня есть два авария java.lang.OutOfMemoryError: один в dalvik.system.NativeStart.main и один в android.graphics.BitmapFactory.nativeDecodeAsset.

Что я могу сделать? Должен ли я переписать весь мой модуль загрузки с использованием баз данных sql и cursoradapter? Я бы хотел этого избежать.

Всякая помощь и идея высоко оценены. Большое спасибо: Иштван

+0

Вы подумали о возможности загрузить ваши данные по запросу? Например, когда вы используете приложение Instagram, когда свиток достигает дна, он автоматически загружает больше фотографий. В вашем случае вы загрузите больше данных ... Как сегментированная загрузка, чтобы не переполнять вашу память. Это просто идея. –

+0

Спасибо за идею. Я загрузил всю базу данных в arrayadapter (память) для лучшей производительности, а для других моих словарей (100000 записей) он не выдавал ошибок в памяти даже на более слабых устройствах, я, должно быть, достиг своего предела. (Хотя он отлично работает на галактике samsung mini.) – mistvan

ответ

0

Попробуйте использовать нумерацию страниц для этих данных,

как 0-200, 201-300 и др.

использование Custom adepter попробуйте следующую логику.

int page= 100; 
@Override 
public View getView(int position, View convertView, ViewGroup parent) 
    { 
     if (postion>page) 
{  
//  Adjust your array which filling your custom adepter 
//  Load next 100 items from database and notify your adepter 
} 
//do else 
} 

Я предполагаю, что ваши данные поступают из базы данных.

+0

Это хорошая идея, но данные не поступают из базы данных sqlite, а из текстового файла. – mistvan

+0

@mistvan как вы читаете данные из текстового файла? вид локального анализа данных? – dhams

+0

Я прочитал его из активов /getAssets().open/ с BufferedReader по строкам (каждая строка содержит одно заглавие). – mistvan

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