setBackgroundResource()与setImageBitmap()以及setBackground()的使用

博客探讨了在Android开发中,使用setBackgroundResource()方法设置背景可能导致的OOM问题。建议采用多分辨率图片设计,如hdpi、mdpi、ldpi、xhdpi等,以避免内存溢出并遵循官方最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1:直接用setBackgroundResource(R.drawable.img) 容易引起OOM问题,

 使用多分辨率图片设计[hdpi,mdpi,ldpi,xhdpi]。UI图片分别设计hdpi,mdpi,ldpi,xhdpi等多种规格,这也是官方推荐的方式,

 使用这种方式,还有好处就是可以降低峰值内存,优先避免内存溢出。在android中图片的加载会根据分辨率来自动缩放(而缩放的过程会额外消耗内存)


2:用setImageBitmap(bp)来代替SetBackGroundResource(R.drawable.img);

代码
        
public Bitmap getBitmapStream(int id) 
{
BitmapFactory.Options bmFactOpt = new BitmapFactory.Options();
bmFactOpt.inPreferredConfig = Bitmap.Config.RGB_565;//表示16位位图 565代表对应三原色占的位数
bmFactOpt.inInputShareable = true;
bmFactOpt.inPurgeable = true;//设置图片可以被回收
InputStream is = getResources().openRawResource(id);
Bitmap bitmap = BitmapFactory.decodeStream(is, null, bmFactOpt);//比decodeResource()节省内存
try 
{
   is.close();
} catch (IOException e) 
{
   Log.e("IOException:",e.getMessage());
   e.printStackTrace();
}
return bitmap;
}


        imageview.setImageBitmap(getBitmapStream(R.drawable.id));


3:setImageBitmap(bp)虽然节省内存,但不能拉伸,如果想再进行拉伸,可以用setBackground(Drawable);


    Bitmap bp = getBitmapStream(R.drawable.pag03);
    imageview.setBackground(new BitmapDrawable(this.getResources(),bp)); 这样既可以节省内存,又可以拉伸整个手机屏幕
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值