Android ListView包含大量数据 - 内存不足错误

时间:2013-06-17 17:09:22

标签: android listview android-arrayadapter out-of-memory

我正在发布双语词典应用程序(https://play.google.com/store/apps/details?id=com.akkzrt.szotarhude012013a),这两种语言都有超过13万个词条。在程序启动时,我将数据从两个存储在assets文件夹中的utf-8文本文件预加载到两个ArrayAdapter中,然后我将第一个适配器设置为单个ListView。在ListView的顶部,我有一个按钮可以更改为另一个适配器(来回)。我测试了一些设备(三星galaxy mini,asus tf201,三星galaxy s 1和2,lg nexus 4,三星galaxy nexus),一切都很顺利。

然后有一位用户带着索尼爱立信Experia MK16i来找我。他抱怨说应用程序没有为他启动,只是加载了很长时间然后内存不足。在我的google play开发者管理页面中,我有两个java.lang.OutOfMemoryError崩溃:一个在dalvik.system.NativeStart.main中,另一个在android.graphics.BitmapFactory.nativeDecodeAsset中。

我该怎么办?我应该使用sql数据库和cursoradapter重写我的整个加载模块吗?我想避免这种情况。

非常感谢每一个帮助和想法。非常感谢你: 的István

1 个答案:

答案 0 :(得分: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 
} 

我假设您的数据来自数据库。