Android ListView具有大量数据-内存不足错误

Android ListView具有大量数据-内存不足错误,android,listview,android-arrayadapter,out-of-memory,Android,Listview,Android Arrayadapter,Out Of Memory,我正在发布一个双语词典应用程序(),这两种语言的词条超过130000个。在程序启动时,我将数据从存储在assets文件夹中的两个utf-8文本文件预加载到两个ArrayAdapter中,然后将第一个适配器设置为我的单个ListView。在该列表视图的顶部,我有一个按钮可以切换到另一个适配器(来回)。我在一些设备上进行了测试(三星galaxy mini、华硕tf201、三星galaxy S1和2、lg nexus 4、三星galaxy nexus),一切正常 然后一个用户带着他的索尼爱立信Expe

我正在发布一个双语词典应用程序(),这两种语言的词条超过130000个。在程序启动时,我将数据从存储在assets文件夹中的两个utf-8文本文件预加载到两个ArrayAdapter中,然后将第一个适配器设置为我的单个ListView。在该列表视图的顶部,我有一个按钮可以切换到另一个适配器(来回)。我在一些设备上进行了测试(三星galaxy mini、华硕tf201、三星galaxy S1和2、lg nexus 4、三星galaxy nexus),一切正常

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

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

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

尝试对该数据使用分页

比如0-200,201-300等等

使用自定义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 
} 

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

您是否考虑过在需要时加载数据的可能性?例如,当您使用Instagram应用程序时,当滚动条到达底部时,它会自动加载更多照片。在您的情况下,您将加载更多数据。。。就像分段加载一样,不会溢出内存。这只是个主意,谢谢你的主意。我将整个数据库加载到arrayadapter(内存)中以获得更好的性能,而对于我的其他字典(100000个条目),即使在较弱的设备上,它也不会产生任何内存不足的错误,我一定已经达到了某种程度的限制。(虽然它在三星galaxy mini上运行得非常好。)这是个好主意,但数据不是来自sqlite数据库,而是一个文本文件。@mistvan如何从文本文件读取数据?某种本地数据解析?我从assets/getAssets()读取它。使用BufferedReader逐行打开/读取(每行包含一个标题词)。我明白了,如果数据太大而无法处理,则应该将其分块处理。还有一件事我不明白:我正在将1.5 MB和2.4 MB文本文件加载到两个列表中。为什么它们占用了24MB的内存?