我正在尝试降低我的应用程序的内存使用量,我注意到它的大部分是由活动的背景引起的:在XHDPI中,720 * 1280 * 4 = 3.6Mbytes,而Android似乎没有一旦它们不再使用就立即释放它们。
有没有办法告诉Android将某些资源图片加载为RGB 565
而不是RGB 8888
,以便在没有Alpha通道的情况下为那些较大的图片保存一些内存?
我知道这可以通过编程方式完成,但我想知道是否也可以使用活动布局或setBackgroundResource()
中使用的图像和背景来完成。
答案 0 :(得分: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%的记忆保存,但质量当然不高。
这个article告诉我们在Android< 2.3图像默认为RGB_565。但是,如果图像具有Alpha通道(例如PNG),则它将加载到ARGB_8888中。在Android> = 2.3上,默认情况下所有图像都加载到ARGB_8888中。
答案 1 :(得分:2)
目前无法将资源标记为RGB_565。
您可以做的最好的事情是提供一个后续数据文件,将您的图像文件映射到所需的内存格式。在加载时,您可以根据文件检查每个资源ID,以确定是否要将BitmapFactory选项设置为565或8888.
大多数下拉图像数据的应用程序都使用类似的过程。例如,一些具有小分辨率的JPG图像被假定为缩略图,并使用565路径加载到存储器中。允许全屏JPG以8888加载到内存中。
基本上,您在应用中总是需要一定程度的逻辑来相应地设置BitmapOptions。