ファイルからデータを読み込むアプリを作成しています。ファイルは比較的大きく(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
メモリの問題もありました。また、すべてのデータを1つの「マスター」に保存し、ArrayList
その「マスター」でメソッドを呼び出して、データを適切なものに追加しましたArrayList
(コピーしたらすぐに「マスター」からデータを削除/クリアします)。
メモリへの影響を合理化および削減する方法についてのアイデアはありますか?
編集**
Logcat:
これは、戻るボタンをクリックしてからアクティビティを再度ロードしたときからです。以下は、(詳細に)生成されるメッセージの1つにすぎません。