布局优化和Bitmap的简单优化

布局优化

布局优化也就是这三个标签的使用,merge,ViewStub,include

include标签主要作用是代码的重用,比如我们要使用的某个布局被多个布局使用,就可以使用include标签引入,避免冗余代码。
merge标签的作用主要是减少布局的层级,布局层级越深,cpu计算需要的时间就越多,我们所谓的16ms完成计算并渲染就变难了。我们可以通过hierarchyviewer查看我们的布局,通过查看可以知道我们的布局全被写在一个FrameLayout的布局里,当我们的activity根布局为FrameLayout时就重复嵌套了一个多余的布局。使用merge时我们要注意两点

  1. merge只可以作为布局的根节点
  2. 当需要扩充的布局本身是由merge作为根节点的话,需要将布局至于ViewGroup中,同时需要设置attachToRoot设置为true

ViewStub的主要作用是延迟加载,延迟加载的功非常重要,特别是在界面显示的内容比较多并且所占空间比较大时。ViewStub是一个不可见的、大小为0的视图,最佳用途就是实现View的延迟加载,在需要的时候再加载View。
当调用VIewSub的setVisibility()函数设置为可见或调用inflate初始化该View的时候,ViewStub引用的资源开始初始化,然后VIewSub引用的资源替代ViewStub自己的位置。在没有setVisibility可见或inflate之前,ViewStub一直存在组件树的层级结构中。但是由于ViewStub非常轻量级,所以对性能影响非常小。

<ViewStub android:id="@+id/stub"
          android:inflatedId="@+id/subTree"
          android:layout="@layout/mySubTree"
          android:layout_width="120dp"
          android:layout_height="120dp" />

在上述代码中定义了VIewStub,这可以通过id “stub”来找到。在初始化资源mySubTree后,从父组件删除了ViewStub,然后mySubTree代替了stub的位置。

ViewStub stub=findviewById(R.id.stub);
View inflated=stub.inflate();

当调用函数inflate时,ViewStub被引用的资源代替,并且返回引用的View而不需要再用findViewById来查找了
注意:ViewStub暂时还不支持merge标签

总结:

1.避免不必要的嵌套,不要把一个布局放置在其他布局里,除非是必须的
2.避免使用太多视图,在一个布局里没增加一个新的视图,都会在过度操作时消耗很多资源和时间
3.避免嵌套太深

Bitmap的简单优化

这里不讲三级缓存,只是简单的优化。当我们加载一招图片时,如果图片过大,而我们没有足够多的内存,毕竟我们不可能使用手机所有的内存,就会发生OOM。图片过大就是我们加载了高分辨率不图片到内存,我们其实并用不了多么高的分辨率,根据手机本身加载最好。这时我们就要使用BitmapFactory.Options设置inSampleSize来缩放图片。
我们需要先设置inJustDecodeBounds为true来达到在不加载图片到内存的情况家获取图片的宽高。

   BitmapFactory.Options options=new BitmapFactory.Options();
       //在不加载进内存的情况下获取宽高
       options.inJustDecodeBounds=true;
        Bitmap bitmap = BitmapFactory.decodeFile("",options);//加载图片,并未装载进内存
        int width=options.outWidth;
        int height=options.outHeight;
        //通过我们要显示的大小比较实际大小进行缩放
        。。。。。
        options.inSampleSize=xxx;//2代表狂傲都变为1/2
        options.inJustDecodeBounds=false;
        options.inDither=true;//在N以上版本被忽略,抖动解码。因为降低了像素点的位数所以有些色彩在低位数颜色中不存在,会填充相近颜色填充,当一大片都哦那个一个颜色填充会产生一些断裂色带,设置为true用随机噪声色填充
        options.inPreferredConfig = Bitmap.Config.RGB_565;//减少像素点所占内存
        Bitmap finalBitmap = BitmapFactory.decodeFile("",options);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值