私のAndroidアプリで知っておくべき次の問題があります。
このプロセスには 3288 バイトの外部割り当てが大きすぎます。
メモリ不足: ヒープ サイズ = 5959KB、割り当て済み = 3922KB、ビットマップ サイズ = 18614KB
VM で 3288 バイトを割り当てられない
事実:
画面のビットマップ (非常に巨大) を作成し、それを操作 (サイズの変更など) して、ページをめくるアニメーションを実行します。
欲望の HTC でのみクラッシュします。galaxy s2 と kindle fire では問題ありません。
次のコードで新しいビットマップを作成するたびに、現在のビットマップの割り当てを解除しています。
古いビットマップ = this.bitmap;
this.bitmap = bitmap; this.invalidate(); if(old != null) old.recycle();
私もこの関数を呼び出そうとしました:
public void recycle() { if (this.bitmap!=null) this.bitmap.recycle(); System.gc(); Runtime.getRuntime().gc(); }
私のコードで数回、時々少し良くなります(少し後でクラッシュするなど)が、それでもまだ良くありません。
- 私はこの問題に多くの時間を費やしましたが、それを修正する方法が本当にわかりません。フォーラムには間違った情報がたくさんあるようで、ちょっと迷っています。
ありがとう、もっと正確にお願いします。
編集 :
これは a lot と呼ばれるコードです:
//set the foreground image with the current day
Bitmap b = Bitmap.createBitmap(visibleLayout.getWidth(), visibleLayout.getHeight(),Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
visibleLayout.draw(c);
viewBitmapNext.setBitmap(b);
viewBitmapNext.setVisibility(View.VISIBLE);
ここで、viewBitmapNext は View クラスの上書きされた要素です。setBitmap 関数は上記で説明されています。
サイズ変更については、次のコード行を実行します。
viewBitmapPrevious.setLayoutParams(new RelativeLayout.LayoutParams((int) (iterator - ((totalWidth - iterator) - activity.getResources().getDimension(R.dimen.margin_right))/2), RelativeLayout.LayoutParams.WRAP_CONTENT));
繰り返しますが、詳しく知りたい場合は教えてください。