0

メモリ不足の問題があったため、新しいアクティビティを開始する前に背景をきれいにすることにしました。

動作しますが、新しいアクティビティが開始される前に黒い画面が表示されるという悪い副作用があります。

これは私のコードです:

ここに設定しました:

@Override
protected void onResume() {
    super.onResume();

    bg.setBackgroundDrawable(new BitmapDrawable(decodeSampledBitmapFromResource(getResources(), R.drawable.bg, sizeWigth, sizeHeight)));

}

ここでクリアします:

@Override
protected void onPause() {
    super.onPause();
    bg.setBackgroundDrawable(null);
    System.gc();
}

それを修正する考えはありますか?

4

1 に答える 1

2

大きな画像をロードするときは、次のルールに従ってください

  1. 画面 DPI に基づいて画像を読み込みます。画面が小さい場合、巨大な画像をメモリにロードする理由はありません。

  2. ビットマップ サンプリング。大きな画像のサブサンプリングについては、これをお読みください

  3. HeapSize を監視し、イメージを読み込んだ後に他の処理を行うのに十分なスペースを確保してください。このリンクを確認してください

  4. Java 参照を使用してイメージをロードします。画像が null の場合は、必ず再読み込みしてください。これにより、メモリ不足の問題を回避できます。

    System.gc();

はガベージ コレクターへのヒ​​ントであり、この行の実行後にガベージ コレクターがガベージを収集することを保証するものではありません。

この画像を XML レイアウトに配置しても、メモリの問題は解決しません。

于 2013-03-27T22:38:26.920 に答える