记得看文章三部曲,点赞,评论,转发。 微信搜索【程序员小安】关注还在移动开发领域苟活的大龄程序员,“面试系列”文章将在公众号同步发布。java
经过面试官问我:Andriod中子线程为何不能更新UI?成功斩获offer的天才少年_逐渐膨胀,今天准备准备去大厂试一下。android
天才少年_来到一家大厂等待面试,上家公司萌妹子面试官让我久久不能忘记,不知道今天的面试官是什么样子。
一个眼睛更大更亮,超级可爱的小姐姐,站在我面前,居然比昨天的面试官更蠢萌,今天看天才少年如何把她带回家,什么鬼,是把offer带回家。程序员
小伙子,据说你是来面试的,我是今天的面试官,你先介绍一下你本身吧。面试
我叫【天才少年_】,男,30未婚,家里有车有房,个人优势是英俊潇洒,个人座右铭是:既往不纠结,纵情向前看,继续努力。shell
额,你这介绍,怎么感受是来相亲的。微信
果真面试官已经被我英俊的外表深深吸引,不能自拔,嗯,萌萌的外表都是不太聪明的样子,今天面试有但愿啦,我心中一阵暗喜。
卧槽,连开场语都是如出一辙。(实际是我懒,直接从上篇抄过来的)markdown
你好,跟我说下Android APP中如何测试FPS?app
嘿嘿,还好我有准备,看我如何装逼。 oop
2)测试步骤:
1.Android手机经过USB链接电脑。
2.打开手机“设置”-“更多设置”-“开发者选项”-“GPU呈现模式分析”,选中“在adb shell dumpsys gfinfo”中,如图所示:
部分手机可能路径不一样,下图为个人手机的路径截图。 post
com.victor.intercitycarpool/com.victor.intercitycarpool.ui.account.RegisterOneActivity/android.view.ViewRootImpl@176c16e7 (visibility=0) Draw Prepare Process Execute 0.00 0.75 77.86 2.69 0.00 0.61 4.52 1.65 0.00 0.30 84.77 2.03 0.00 0.18 3.52 2.98 0.00 0.32 3.08 2.52 0.00 0.46 3.05 2.22 0.00 0.14 3.06 2.09 0.00 0.14 3.28 2.32 0.00 0.26 4.18 2.33 0.00 0.15 8.69 14.54 0.00 0.15 4.87 3.21 0.00 0.21 9.58 6.59 0.00 1.49 26.28 3.37 0.00 0.21 6.55 4.59 0.00 2.54 3.81 15.24 0.00 0.20 5.22 2.00 0.00 7.30 4.48 8.07 0.00 0.79 11.45 6.47 0.00 0.20 4.49 2.14 0.00 0.72 3.29 2.78 0.00 1.36 4.14 1.83 0.00 0.38 2.83 2.17 0.00 0.46 3.49 4.52 0.00 0.61 3.68 2.25 0.00 0.37 2.85 2.89 0.00 0.63 3.92 2.37 0.00 0.47 3.28 2.00 0.00 0.42 3.33 2.10 0.00 0.33 2.49 2.27 0.00 0.14 2.79 2.35 0.00 0.13 2.73 2.49 0.00 0.21 3.11 2.26 0.00 0.13 3.60 2.25 0.00 0.13 2.61 2.33 0.00 0.13 2.54 2.36 0.00 0.22 4.20 2.59 0.00 0.13 2.80 2.26 0.00 0.14 2.72 2.27 0.00 0.13 2.76 2.22 0.00 0.22 3.47 2.27 0.00 0.14 2.76 2.35 0.00 0.11 2.28 2.09 0.00 0.11 2.28 1.87 0.00 0.21 2.62 2.37 0.00 0.12 2.16 2.26 0.00 0.11 2.05 1.89 0.00 0.10 2.00 1.81 0.00 0.16 1.89 2.72 0.00 0.11 2.96 2.68 0.00 0.27 5.19 1.86 0.00 0.16 3.06 3.42 0.00 0.38 3.16 4.50 0.00 0.36 86.55 2.64 0.00 0.22 4.75 4.48 0.00 0.22 4.03 2.76 0.00 0.16 4.36 3.84 0.00 0.15 3.53 2.40 0.00 0.15 3.44 3.42 0.00 0.31 5.62 2.18 0.00 0.16 37.08 2.01 0.00 0.16 3.81 2.70 0.00 0.21 3.49 2.51 0.00 0.15 3.74 2.48 0.00 0.15 3.39 2.26 0.00 0.24 4.75 2.45 0.00 0.15 3.50 2.31 0.00 0.15 3.80 6.01 0.00 0.31 3.81 2.15 0.00 0.89 9.96 1.83 0.00 0.18 19.71 2.27 0.00 0.30 36.29 2.05 View hierarchy: com.victor.intercitycarpool/com.victor.intercitycarpool.ui.account.RegisterOneActivity/android.view.ViewRootImpl@176c16e7 24 views, 31.83 kB of display lists 复制代码
赠送一个知识点:
Draw: 建立显示列表(display lists,记录全部view对象的绘制指令)的时间开销。
Process: 执行显示列表中绘制指令的时间。UI视窗中的View数量越多,须要执行的绘画命令就越多。
Execute : 将一帧图像交给合成器compostior的时间。这部分占用的时间一般比较少 而prepare在一些旧adb版本中是算在process上,就是指从建立显示列表到执行显示列表的这一段准备时间的开销
Draw + Prepare+Process + Execute = 完整显示一帧 ,这个时间要小于16ms才能保证每秒60帧,即fps为60,才不会出现卡顿。
7.纯数字看着不直观,上才艺:
把数据导入到excel表格中,生成折线图:
可见,我测试的APP的显示一帧的时间基本都是小于10,暂时不须要优化,天才写的代码果真没有问题。
那有看过主流APP的fps是多少吗?好比淘宝,京东,拼多多
固然看过啊,大厂主app是我学习的方向标。
小伙子分析得很不错,只是今天有点晚了,TraceView的使用我尚未来得及问,我们明天继续。
其实我不介意晚上单独面试的,嘿嘿。 未完待续~~
微信搜索【程序员小安】“面试系列(java&andriod)”文章将在公众号同步发布。