ビットマップを配列リストまたは配列に格納するアプリケーションを作成しています。android:largeHeap="true"
マニフェストで、アプリケーションのメモリサイズを増やすように設定しました。20個のビットマップを作成しています。その後、新しいビットマップが作成された場合、最初のビットマップがリサイクル(削除)され、新しいビットマップが配列リストに追加されます。ビットマップを追加するたびにメモリが解放されますが、次の15〜20(合計35以上)以降、ビットマップヒープサイズは約20〜25MB増加しました。このプロセスは続行され、メモリ不足の例外が発生します。スペースは解放されていません。私は以下のそれぞれを個別にそしてすべて一緒に順番に試しました:
- ビットマップをリサイクルする
- nullを割り当てる
- 配列リストから削除
問題はまだあります。
ArrayList<Bitmap> linesbitmap;
private void touch_start(float x, float y) { // function called on every touch
if (index >= 19) {
while (linesbitmap.size() >= 19) {
linesbitmap.get(0).recycle();
linesbitmap.remove(0);
}
System.gc();
System.runFinalization();
System.gc();
}
if (mBitmap != null) {
linesbitmap.add(Bitmap.createBitmap(mBitmap));
}
index = linesbitmap.size();
}