我正在创建一个涉及从文件中读取数据的应用程序。该文件相对较大 (1.8 MB),正在从 onCreate 中的异步线程读取。应用程序第一次启动时,它加载得很好。但是,如果单击后退按钮然后再次加载它,它会耗尽内存并崩溃(抛出 OutOfMemory 错误)。
如何让它使用尽可能少的内存和/或在完成后释放该内存?
文件读取代码(在doInBackground()
异步类的方法中执行):
public ArrayList<String> createDataList() {
dataList = new ArrayList<String>();
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(getAssets().open(
"text.txt")));
String data;
while ((data = br.readLine()) != null) {
dataList.add(data);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close(); // stop reading
} catch (IOException ex) {
ex.printStackTrace();
}
}
return dataList;
}
编辑*异步类:
private class loadData extends AsyncTask<Void, Void, ArrayList<String>> {
@Override
protected ArrayList<String> doInBackground(Void... arg0) {
dataList = createDataList();
return dataList;
}
protected void onPostExecute(ArrayList<String> result) {
super.onPostExecute(result);
// display first element in ArrayList in TextView as a test
}
}
我曾尝试根据我想如何组织数据并将每个文本文件中的数据存储到单独的文件中来拆分文件,ArrayList
但我也遇到了内存问题。我还将所有数据存储到一个“主”ArrayList
中,然后在该“主”上调用一个方法将数据添加到适当的位置ArrayList
(一旦复制,就从“主”中删除/清除数据)。
关于如何简化和减少内存影响的任何想法?
编辑**
日志猫:
那是从您单击后退按钮然后再次加载活动时开始的。以下只是生成的消息之一(详细):