五、说一说Android中dp, px, sp的区别

dip:设备独立像素,不同硬件设备有不同效果,与像素无关

dp:同dip一样

px:像素,不同设备显示效果相同

sp:用于字体的设置

看一下源码中的解释

public static float applyDimension(int unit, float value, DisplayMetrics metrics) {

        switch (unit) {

        case COMPLEX_UNIT_PX:

            return value;

        case COMPLEX_UNIT_DIP:

            return value * metrics.density;

        case COMPLEX_UNIT_SP:

            return value * metrics.scaledDensity;

        case COMPLEX_UNIT_PT:

            return value * metrics.xdpi * (1.0f/72);

        case COMPLEX_UNIT_IN:

            return value * metrics.xdpi;

        case COMPLEX_UNIT_MM:

            return value * metrics.xdpi * (1.0f/25.4f);

        }

        return 0;

    }

   该函数功能:是把各单位换算为像素。

   metrics.density:默认值为DENSITY_DEVICE / (float) DENSITY_DEFAULT;

   metrics.scaledDensity:默认值为DENSITY_DEVICE / (float) DENSITY_DEFAULT;

   metrics.xdpi:默认值为DENSITY_DEVICE;

   DENSITY_DEVICE:为屏幕密度

   DENSITY_DEFAULT:默认值为160


像素密度:假设手机屏幕分辨率为240X320,屏幕物理尺寸为1.5英寸X2英寸。每英寸包含像素点数为240/1.5 = 160. 160dpi就是这部手机的像素密度。

android默认low = 120 medium = 160 high = 240 之后还有veryhigh = 320 ,他们对应的dp到px系数分别为0.75,1,1.5和2,这个系数乘以dp就是像素数

sp为与缩放无关抽象像素,sp与dp类似,但是唯一区别在于sp随着系统字体字号大小设置而改变,一般建议文字大小用sp,其它大小用dp


六、include、merge和viewstub区别

include标签主要用于布局的复用,当有些地方需要使用已经定义过的布局时,就可以使用Include标签来加载该布局。值得注意的是,加载布局的根布局的id要与include标签的id一样,否则会导致获取不到根布局。

merge为合并标签。用于减少布局层级,提高性能。当内容布局的父布局与外层布局具有相同属性时,就可以使用merge标签作为内容布局父布局。

viewstub标签。viewstub布局也是用来加载布局的,但是与include不同,viewstub标签本身是不可见的,需要使用viewstub的inflate方法或visible方法加载布局并显示。需要注意的是,viewstub在加载布局后,自身会被移除,原位置由加载布局替换。这也是为什么viewstub的加载只能调用一次,因为之后在调用,就会因为找不到viewstub而报空指针错误。

viewstub使用比较灵活,适用于特定情况下的布局加载,在需要时才加载,从布局和性能上来看,也是一种优化手段。


七、谈一谈过度绘制及其优化

过度绘制:屏幕上的某个像素,在同一帧内被绘制多次,多层重叠的UI结构里,如果不可见的UI也在做绘制操作,会导致某些像素区域被绘制多次,对CPU和GPU资源是一种浪费。

常见的优化方案就是合理设计UI层级与布局,做到减少UI重叠。同时减少不必要的背景绘制。相同的背景可以合并,不会展示的背景可以去掉。


更多相关文章

  1. Android(安卓)9 Pie 兼容性常见问题及注意事项
  2. android 官方文档阅读记录-多屏幕适配
  3. Android评论布局,针对TextView换行和与其他空间对齐的实现
  4. Android(安卓)GridView/ListView点击事件并改变控件的背景颜色//
  5. Android(安卓)Layout布局属性
  6. [android] webview解析
  7. Android基于ListView实现类似QQ空间的滚动翻页与滚动加载效果
  8. Android中webview加载网页无法点击或滚动
  9. 关于异步加载、缓存图片、软引用等

随机推荐

  1. Android页面滑动
  2. Android消息机制浅析
  3. Android 开发之自定义三级缓存
  4. android文件管理器(1)
  5. Android的AlertDialog,setView后去除黑色
  6. android 获取SD卡的图片及其路径
  7. android 点亮屏幕和屏幕解锁
  8. Android开源项目源代码分享
  9. Android自启动应用添加和限制
  10. android 输入法的打开和关闭