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

青岛网站建设方案优化wordpress入门到精通

青岛网站建设方案优化,wordpress入门到精通,网站自动答题脚本怎么做,福州做网站建设公司对于传统的60刷新率手机来说#xff0c;每16ms会发出一个VSync信号#xff0c;复制CPU/GPU放在缓存中的图像#xff0c;再通知CPU/GPU计算下一帧要显示的内容#xff0c;再把刚复制的图像显示在屏幕上#xff0c;这就是一个屏幕刷新周期。而如果在16ms内没有计算完毕的话每16ms会发出一个VSync信号复制CPU/GPU放在缓存中的图像再通知CPU/GPU计算下一帧要显示的内容再把刚复制的图像显示在屏幕上这就是一个屏幕刷新周期。而如果在16ms内没有计算完毕的话该帧就无法展示屏幕进入下一个刷新周期就产生了所谓的掉帧现象。 1. 掉帧监控 监控掉帧现象时我们可以使用下方的adb命令具体可见参考. adb shell dumpsys gfxinfo packageName复制 该命令展示的信息比较完整如下所示。 Applications Graphics Acceleration Info: Uptime: 275941522 Realtime: 391854346** Graphics info for pid 6887 [packageName] **Stats since: 275926453465347ns Total frames rendered: 523 // 本次共收集了523帧的信息 Janky frames: 26 (4.97%) // 有26帧的耗时超过16ms掉帧率为4.97% 50th percentile: 5ms // 50%的帧耗时在5ms以内 90th percentile: 8ms 95th percentile: 16ms 99th percentile: 20ms Number Missed Vsync: 0 // 垂直同步失败的帧 Number High input latency: 259 // 处理input时间超时的帧数 Number Slow UI thread: 1 // 因UI线程上的工作导致超时的帧数 Number Slow bitmap uploads: 0 // 因bitmap的加载耗时的帧数 Number Slow issue draw commands: 0 // 因绘制导致耗时的帧数 Number Frame deadline missed: 1 HISTOGRAM: 5ms346 6ms72 7ms31 ......... // 耗时0-5ms的帧有346......各种缓存...... Total GPU memory usage:40704248 bytes, 38.82 MB (36.77 MB is purgeable) ......复制 如果只看掉帧率可以用adb shell dumpsys gfxinfo| grep Janky frames命令。 如果想重新开始计算帧率信息可以通过adb shell dumpsys gfxinforeset重置。 当然我们也可以通过可视化界面查看UI性能打开开发者选项中的GPU渲染模式分析即可在屏幕上看到每一帧绘制时间的直方图某个值越大代表该帧绘制的时间越长。如下图所示冷启动APP时有不少帧的绘制时间已经远远超过了16ms。 除了GPU渲染模式分析还有Android Studio中的CPU Profile用于查看APP运行时的方法调用栈辅助开发人员定位热点方法并优化。我们来做个实验在Demo中的onBindViewHolder()中添加Thread.sleep(5)使每次绑定ItemView都会多消耗5ms。 运行程序后打开Profile可以看到CPU、MEMORY、NETWORK和ENERGY四个动态图表点击CPU后下方出现CPU Profile界面如下所示点击record即可开始记录点击stop后得到这一段时间内的方法调用栈。 得到方法调用栈信息后先从Flame Chart模式来看热点方法很明显sleep函数耗时较多。 如果想要数字化的信息可以通过Top Down模式查看每个方法及其子方法的耗时和百分比分析时一般点击耗时占比高的方法查看它的子方法哪个耗时较多再一步步追踪下去。 在我们的例子中sleep()函数占总耗时的49.58%是耗时最多的方法。 总结一下CPU Profile为开发者提供了强大的分析工具我们很容易定位APP运行时耗时多的方法然后具体问题具体分析。当然CPU Profile不仅仅用于掉帧优化有优化的地方就有它的身影例如启动优化等。 2. 掉帧优化措施 ① 正确使用缓存 关于mCachedViews mCachedViews针对ItemView的position进行缓存。当一个Item滑出可视区域时它会先被放入mCachedViews中而当一个Item滑入可视区域时Recycler也会优先去mCachedViews中查找。 根据这个特性当用户频繁地上下滑动时mCachedViews的利用率会较高。那么针对频繁上下滑动的场景我们可以通过RecyclerView.setItemViewCacheSize(…)来增大mCachedViews的容量这样Recycler更容易在mCachedViews中找到缓存减少之后的onBindViewHolder()和onCreateViewHolder()调用。 关于RecyclerPool RecyclerPool针对某个ViewType进行缓存默认大小为5但是对于某些场景这是远远不够的。试想一个能在可视区域展示n(n5)条数据的RecyclerView(如历史记录)当滑动的时候RecyclerPool的缓存明显不够会不断地创建ViewHolder很消耗性能。针对这种情况可以通过RecyclerView.getRecycledViewPool().setMaxRecycledViews(int viewType, int max)增大特定ViewType的缓存容量。 如果多个RecyclerView的内容性质相同例如在信息流中多个Fragment中的Item类型相同。那么可以为它们设置同一个RecyclerPool(默认是1个RecyclerView创建一个RecyclerPool)通过RecyclerView.setRecycledViewPool(pool)设置即可。 ② 优化onBindViewHolder()耗时 从RecyclerPool中取出的ViewHolder都会调用onBindViewHolder()加载数据该方法是在主线程运行的处理不当时很容易造成滑动卡顿。 当为ItemView设置点击监听时不要在onBindViewHolder()中新建OnClickListener这不仅会新建多余的对象消耗内存也会增加onBindViewHolder()的耗时。可以让所有的Item共用一个监听器然后根据具体的Item来处理事件。 平时重写的onBindViewHolder(ViewHolder holder, int pos)会更新ItemView的所有内容如果想要局部更新可以重写onBindViewHolder(ViewHolder holder, int pos, Listpayloads)。当ItemView更新时调用Adapter.notifyItemChanged(position, payLoad)即可。具体可见参考5通过这个方法解决了ItemView更新时图片闪烁的问题。 ③ 布局优化 布局优化一个比较典型的优化项就是优化过度绘制打开开发者选项中的调试GPU过度绘制就能看到屏幕上每个像素点在屏幕上绘制了多少次。 对过度绘制进行优化时首先要考虑合适的控件容器也就是Layout。虽然Google推出了约束布局ConstraintLayout但是它性能上并不优秀不建议使用。 其次要善用merge和ViewStub。merge用于减少布局层级例如自定义ViewGroup时可以用作为根布局。ViewStub是布局文件中的占位符对于某些在特殊场景下才需要显示的控件可以先用ViewStub代替等到需要显示时再加载。 还有一个常见的优化项就是layout_weight该属性可以很轻松地实现空间分配但是也很容易成为性能瓶颈能不用就不用。 ④ measure()优化和减少requestLayout()调用 当RecyclerView宽高的测量模式都是EXACTLY时onMeasure()方法不需要执行dispatchLayoutStep1()等方法来进行测量。而当RecyclerView的宽高不确定并且至少一个child的宽高不确定时要measure两遍。 因此将RecyclerView的宽高模式都设置为EXACTLY有助于优化性能。 protected void onMeasure(int widthSpec, int heightSpec) {// ......if (mLayout.isAutoMeasureEnabled()) {final int widthMode MeasureSpec.getMode(widthSpec);final int heightMode MeasureSpec.getMode(heightSpec);mLayout.onMeasure(mRecycler, mState, widthSpec, heightSpec);final boolean measureSpecModeIsExactly widthMode MeasureSpec.EXACTLY heightMode MeasureSpec.EXACTLY;if (measureSpecModeIsExactly || mAdapter null) {return;}// ...... }复制 还有一个方法RecyclerView.setHasFixedSize(true)可以避免数据改变时重新计算RecyclerView的大小来看一下方法注释。 注释上说如果Adapter的变化不会影响RecyclerView的size那么可以设置mHasFixedSize为true来避免Adapter改变时RecyclerView刷新整个Layout。也就是说不管数据变成什么样如果RecyclerView的宽高都不会变那么设置这个属性为true。 /*** RecyclerView can perform several optimizations if it can know in advance that RecyclerViews* size is not affected by the adapter contents. RecyclerView can still change its size based* on other factors (e.g. its parents size) but this size calculation cannot depend on the* size of its children or contents of its adapter (except the number of items in the adapter).* p* If your use of RecyclerView falls into this category, set this to {code true}. It will allow* RecyclerView to avoid invalidating the whole layout when its adapter contents change.** param hasFixedSize true if adapter changes cannot affect the size of the RecyclerView.*/ public void setHasFixedSize(boolean hasFixedSize) {mHasFixedSize hasFixedSize; }复制 当Adapter调用onItemRangeChanged(), onItemRangeInserted(), onItemRangeRemoved(), onItemRangeMoved()这4个方法时会调用triggerUpdateProcessor()当mHasFixedSize为true时不会调用requestLayout()重新计算宽高。 注意如果调用notifyDataSetChanged()还是会调用requestLayout()去计算宽高。 void triggerUpdateProcessor() {if (POST_UPDATES_ON_ANIMATION mHasFixedSize mIsAttached) {ViewCompat.postOnAnimation(RecyclerView.this, mUpdateChildViewsRunnable);} else {mAdapterUpdateDuringMeasure true;requestLayout();} }
http://www.yutouwan.com/news/383274/

相关文章:

  • 网站怎么防采集服务好的南昌网站设计
  • 做文件的网站做网站开发要安装哪些软件
  • 创办网站需要哪些步骤建立网站的申请
  • 手机传奇网站flash网站优化
  • 墨子网站建设宁波建站平台
  • 网站建设与维护模板企业自己建设的营销网络
  • 做网站每月收入网站seo优化检测
  • 企业网站建设ejiew网站平台建设步骤
  • 茂名建网站十堰网络科技有限公司
  • 移动网站开发 王府井网站开发环境是什么意思
  • 建设银行网站可以更改个人电话免费个人简历制作网站
  • 合肥市城乡和建设网站wordpress注册表单
  • 网站快速收录建设鲜花网站前的市场分析
  • 怎么做一购物网站企业年金400退休拿多少
  • 网站logo例子广告设计与制作自我评价
  • 博客类网站怎么做装修网站推广方案
  • 制作企业网站的方法广告平面设计软件
  • 阿里云做网站id怎么自动导入wordpress
  • 网站ueologo设计竞标网站
  • 服装网站建设规划书怎么写手机网站建设设计服务
  • 网站名称能用商标做名称吗咸阳网站建设工作室
  • 常州做网站企业某俄文网站
  • 综合性电子商务网站有哪些做做网站需要多少钱
  • 一级造价工程师报名网站wordpress 文章名
  • 廊坊做网站优化的公司网站优化优化怎么做
  • 备案过的网站换空间创意咨询策划公司
  • 福州网上商城网站建设一级a做爰片视频免费观看网站
  • 做国外搞笑网站ui设计师可以做到多少岁
  • 做付费动漫网站百度app官方下载安装到手机
  • 用asp做网站需要准备什么软件网络推广是干嘛的