0

私の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));

繰り返しますが、詳しく知りたい場合は教えてください。

4

1 に答える 1

0

何が問題なのかわかりました。それは私のプロジェクトに密接に関連しているばかげたエラーなので、誰にとっても興味深いことではありませんが、とにかくそれを言います。

私は実際に2つのエラーがありました:

  • 要素を無限に作成する1つのループ。
  • 安い電話で特定のアクションを実行した後、背景として置いた2つの大きな写真(私はまだその上にいますが、簡単に解決できるはずです)。終わったらこの答えを編集します。

私を助けてくれたすべての人にとって、問題の解決策を見つけることはできませんでした(私が行っているビットマップ画面とは関係ありませんでした)が、それでもそれは途中で役に立ちました。

ありがとう。

于 2012-07-04T02:24:43.750 に答える