7

我正在尝试降低我的应用程序的内存使用量,我注意到其中大部分是由活动的背景引起的:在 XHDPI 中,每个 720*1280*4 = 3.6Mbytes,Android 似乎没有将它们发布为一旦它们不再使用。

有没有办法告诉 Android 加载某些资源图像,RGB 565而不是RGB 8888为了在那些没有 alpha 通道的较大图像上节省一些内存?

我知道这可以通过编程方式完成,但我想知道这是否也可以使用活动布局中使用的图像和背景或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 时,图像的像素将存储在 2 个字节上,而不是 4 个。节省了 50% 的内存,但质量当然会降低。

本文告诉我们,在 Android < 2.3,图像默认为 RGB_565。但是,如果图像具有 alpha 通道(例如 PNG),它将以 ARGB_8888 加载。在 Android >= 2.3 上,默认情况下所有图像都以 ARGB_8888 加载。

于 2013-06-13T18:56:27.593 回答
2

目前无法将资源标记为 RGB_565。

您能做的最好的事情是提供一个后续数据文件,将您的图像文件映射到所需的内存格式。在加载时,您可以根据文件检查每个资源 ID,以确定是否要将 BitmapFactory 选项设置为 565 或 8888。

大多数下拉图像数据的应用程序都使用类似的过程。例如,一些分辨率较小的 JPG 图片,被假定为缩略图,并使用 565 路径加载到内存中。允许全屏 JPG 作为 8888 加载到内存中。

基本上,您总是需要在您的应用程序中使用某种级别的逻辑来相应地设置 BitmapOptions。

于 2015-08-19T01:12:38.303 回答