7

アプリのメモリ使用量を下げようとしていますが、そのほとんどがアクティビティのバックグラウンドによって引き起こされていることに気付きました: XHDPI では、それぞれ 720*1280*4 = 3.6M バイトであり、Android はそれらを次のように解放していないようです。使われなくなったらすぐに。

アルファ チャネルのない大きなイメージのメモリを節約するRGB 565代わりに、 Android に特定のリソース イメージをロードするように指示する方法はありますか?RGB 8888

これはプログラムで実行できることは知っていますが、アクティビティのレイアウトで使用される画像や背景、またはsetBackgroundResource().

4

2 に答える 2

10

次のように実行できます。

protected void onCreate(Bundle savedInstanceState)
{
    setContentView(R.layout.high_scores);
    BitmapFactory.Options opts = new BitmapFactory.Options();
    opts.inPreferredConfig = Config.RGB_565;
    BitmapDrawable highScoresBg = BitmapFactory.decodeResource(getResources(), R.drawable.achievements, opts);
    findViewById(R.id.high_scores_root).setBackgroundDrawable(highScoresBg);

ARGB_8888 を使用すると、画像のピクセルは 4 バイトではなく 2 バイトで保存されます。メモリは 50% 節約されましたが、もちろん品質は低下しました。

この記事では、Android < 2.3 では、画像はデフォルトで RGB_565 であることがわかります。ただし、画像にアルファ チャネル (たとえば PNG) がある場合は、ARGB_8888 で読み込まれます。Android >= 2.3 では、デフォルトですべての画像が ARGB_8888 に読み込まれます。

于 2013-06-13T18:56:27.593 に答える