当前位置: 首页 > news >正文

ionic做网站品牌建设和市场营销的区别

ionic做网站,品牌建设和市场营销的区别,潍坊网站建设价格低,学校校园网站建设实践选题背景安卓绘制原理概览_油炸板蓝根的博客-CSDN博客 搜了一下#xff0c;全网居然没有人提过 measureCache。 在前文中提到过#xff0c;measure的时候#xff0c;如果命中了 measureCache#xff0c;会跳过 onMeasure#xff0c;同时会设置 PFLAG3_MEASURE_NEEDED_BEFORE_LAYOU…安卓绘制原理概览_油炸板蓝根的博客-CSDN博客 搜了一下全网居然没有人提过 measureCache。 在前文中提到过measure的时候如果命中了 measureCache会跳过 onMeasure同时会设置 PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT标志位其作用顾名思义需要在 layout 前进行 measure。 public class View {public final void measure(int widthMeasureSpec, int heightMeasureSpec) {if (mMeasureCache null) mMeasureCache new LongSparseLongArray(2);......int cacheIndex forceLayout? -1: mMeasureCache.indexOfKey(key);if (cacheIndex 0 || sIgnoreMeasureCache) {// measure ourselves, this should set the measured dimension flag backonMeasure(widthMeasureSpec, heightMeasureSpec);mPrivateFlags3 ~PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;} else {long value mMeasureCache.valueAt(cacheIndex);// Casting a long to int drops the high 32 bits, no mask neededsetMeasuredDimensionRaw((int) (value 32), (int) value);mPrivateFlags3 | PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;}}public void layout(int l, int t, int r, int b) {if ((mPrivateFlags3 PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT) ! 0) {onMeasure(mOldWidthMeasureSpec, mOldHeightMeasureSpec);mPrivateFlags3 ~PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;}...} } 这里有点令人疑惑为什么在 measure 中跳过了 onMeasure但又在 layout 中找补了回来。不执行可以优化性能耗时但这里又重新执行了一次优化在哪里既然有这段代码那么就一定是优化的我们先有一下两种猜测 前一次和后一次执行的逻辑不同前一次的性能耗时长后一次的性能耗时短所以有优化。优化了执行次数前者执行次数比后者多。 让我们先看一下引入 measureCache 的 commit message看看作者怎么说的。 Skip unnecessary measurements when possible. This change introduces a new measure cache to View, to remember the measured dimensions for previous pairs of measure specs. The measure cache is cleared whenever a View requests layout. Unfortunately some Views rely on measure being always called when layout is invoked. To work around this problem, we need to remember when we hit the measure cache to force a call to measure just prior to calling onLayout(). This does not completely removes all measure calls but enough to optimize a number of layouts. 跳过不必要的 measure。这次改动针对 view 引入了新的measure 缓存其可以记录已经测量过的measure specs。每次 view requestLayout的时候都会清除 measure cache。 不幸的是一些 view 在layout 调用的时候总是需要 measure 调用。为了解决这个问题我们需要在命中 measure 缓存的时候强制在 OnLayout中调用  onMeasure。这种做法没有完全移除 measure 的调用但是也已经足够优化一部分了。 跳过 onMeasure虽然可以提高效率但是有一些自定义 view 是依赖其 onMeasure 流程保证其正常工作的。换句话说一些自定义 View 的 onMeasure 方法不仅仅完成了可以被跳过的 measurement还执行了某些不能被跳过的流程。 例如 ViewPager public class ViewPager {protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {// measure self and decor...// update childrenpopulate();// measure children...} } ViewPager 依赖onMeasure 更新 page如果 onMeasure 被跳过就有可能出现 page 错位的情况。除了 ViewPagerRecyclerView、CoordinateLayout 等复杂度较高的组件也都在 onMeasure 中做了许多复杂的工作。既然 onMeasure 一定要执行那么 measureCache 的优化工作又体现在哪里呢毕竟 commit message 最后写了“but enough to optimize a number of layouts.”  measureCache 可以将一次 Traversal 中多次冗余 onMeasure 减少为一次对于很多 ViewGroup在 onMeasure 阶段往往会不止一次的调用 child 的 measure例如RelativeLayout 、使用了 weight 的 LinearLayout、ConstraintLayout 等等measureCache 的存在使得 child 本应该在 parent view onMeasure 阶段执行的多次 measure 被延后到 layout 阶段且仅执行一次。 public class RelativeLayout extends ViewGroup {protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {measureChildHorizontal(child, params, myWidth, myHeight);measureChild(child, params, myWidth, myHeight);setMeasuredDimension(width, height);} } 假设 A、B、C 都是一个需要测量孩子两次的 ViewGroup那么如果没有 MeasureCache当执行 A 的 Measure 时候将会调用 BBCC共四次 measure同样的调用DDEEDDEEFFGGFFGG共 16 次 measure。但是如果有 measureCache在 measure 阶段将会调用 A 的 measure如果 A 是顶 viewGroup然后直接设置 B、C 的大小。只调用了 1 次。然后在 layout 阶段调用一次 B 的 onMeasure、一次 C 的 onMeasureDEFG 的 onMeasure 各一次。所以只调用了六次。已经足够优化了。
http://www.huolong8.cn/news/419174/

相关文章:

  • id97网站怎么做的安徽太基建设官方网站
  • 通过php获取手机网站访客的手机号码wordpress跨站脚本攻击漏洞
  • 装修网站建设案例电子商务网站建设的规划方案
  • 网站开发招标任务书用python做网站优点
  • 网站建设运营合同书网站配色表
  • 做网站维护怎么找客户厦门建设网站企业
  • 潍坊网站建设服务商wordpress 安装主题 ftp
  • 电商加盟的网站建设青海城乡和住房建设厅网站
  • 网站建设教程菜鸟物流wordpress修改文章字体颜色
  • 深圳网站设计精选刻网站里面的按钮链接怎么做
  • 高性能网站建设书籍网站挂百度广告
  • 网站外链有什么用网站建设seo策略有哪些
  • 包装设计征集网站专业建设网站建站
  • 网站开发项目的简介东莞优化电话
  • 久久室内设计网广州seo顾问服务
  • 门图书馆户网站建设方案网站站点怎么做
  • 做数码测评的网站搭建平台 能说会写
  • 在线注册个体工商户网站改版 seo
  • 淘宝网站的建设与运营设计思路做公司网站和设计logo
  • 安徽城乡建设部网站首页个人网站有什么缺点
  • 长沙做网站品牌徐州人才招聘网官网
  • 手机网站产品展示模板宁波 外贸网站建设
  • 卓越高职院建设网站开发一个app要多少钱呢
  • 企业邮箱 网站建设qq建设网站首页
  • 找工作去哪个网站合肥网站seo公司
  • 网站特效 站长交友wordpress
  • 制作网站怎么做的代运营服务
  • 上海做网站的的公司wordpress 媒体播放
  • 免费网站建设平台刚刚廊坊发生大事了
  • 黄浦品牌网站建设app网站开发重庆