1.2 PerfDog
- 下图,在PerfDog,使用华为P30Pro,查看微博的刷新情况,静态的微博内容在不滑动的时候,刷新率就是0fps,快速滑动时,刷新率在60fps左右,还能查看CPU和内存是使用情况。
- 下图,而在微博播放视频时,刷新率一直就是60fps左右了。
-
下图,普通的APP都基本能达到60fps,相机就不是了,相机拍照稳定在30fps,而自拍时,开启美颜,降到24fps了,看来相机加AI美颜是比较吃性能的。
-
小知识,电影或者是网上看的视频一般是24帧/秒的速度播放的,即可以省性能,效果也不错,索尼A7M3相机可以录制120帧的慢动作,可以做4倍或者5倍升格。
1.3 CPU Profile
- Android性能优化 - 启动速度优化 里有讲怎么使用 Profile 看各个方法的耗时,布局的加载也是会显示的,也可以用来分析卡顿的可能情况。
2.1 过度绘制
-
Overdraw(过度绘制)描述的是屏幕上的某个像素在同一帧的时间内被绘制了多次。在多层次的UI结构里面,如果不可见的UI也在做绘制的操作,这就会导致某些像素区域被绘制了多次。这就浪费大量的CPU以及GPU资源。
-
蓝色绿色是比较好的情况,红色就是层级较多了,为了实现好看的效果,就会套多层布局,过度绘制的多了消耗性能,对与入门机就会卡顿了。
-
手机进入开发人员选项,调试GPU过度绘制,打开显示过度绘制区域。
-
贝壳APP的布局大多是蓝色绿色的,说明他们APP就没什么过度绘制的情况,非常好。
- 到下面的列表就会有过度绘制的情况,但区域不大,只有内容的部分。
- 开发人员选项,显示布局边界,可以看到贝壳的布局层级确实不多,也非常的清晰工整。
- 微博APP的过度绘制区域基本占满整个屏幕了,除了微博还有微信淘宝等列表APP也是大多数红色的,原因可能是列表类的APP,除了父布局,里面还要套RecyclerView,再套itemview,无法避免的过度绘制;但整个item都过度绘制了,贝壳就会比较好一些。
- 微博的布局看起来就会复杂一些了。
2.2 解决过度绘制
-
1.上面的微博跟贝壳比较,微博的item是有过度绘制的情况,那么我们在写RecyclerView的时候,如果RecyclerView的父布局、RecyclerView、item三者的背景只要其中一个设置就可以了,没有设置背景就不会渲染,否则就会有过度绘制的情况。
-
2.父布局套子布局也是尽量只设置其中一个背景,除非没办法都需要背景。
-
3.子view一般绘制后是会覆盖父view,所以一般选择把背景设置在子view。
-
4.视图的层级结构能减少就减少,层级越多绘制速度越慢。
-
5.尽量少设置view的透明度,如果一个view设置了alpha,那他需要知道下面的view是什么内容,再绘制自己,就是过度绘制。如果是文字有透明度,可以在色号里就设置好。
2.3 层级优化
-
Android studiol有布局层级的工具,Layout Inspector,运行起来app后,可以看到每个页面的层级结构。层级太多,肯定就会造成卡顿,启动慢,在启动优化有说,
-
左边可以看到布局树的具体内容。
-
像ScrollView里面只能放一个ViewGroup,是不可缩减的,但 LinearLayout套LinearLayout 是可以通过ConstraintLayout解决的,约束布局可以说是结合了线性布局跟相对布局的优点,能有效减少层级。
2.4 使用merge
-
我们有一些布局是可以通用的,避免重复代码,就可以使用 include。
-
但是,如果使用 include,但里面的布局又是一个 ViewGroup 的话,就会造成层级过多,这个时候就可以使用 merge 标签了,里面的子view根据会外部include地方的ViewGroup来排列,从而减少层级。
<LinearLayout
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:orientation=“vertical”>
<?xml version="1.0" encoding="utf-8"?><merge xmlns:android=“http://schemas.android.com/apk/res/android”
android:id=“@+id/ll_head”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:orientation=“vertical”>
<TextView
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:padding=“10dp”
android:text=“text1”
android:textSize=“16sp” />
<TextView
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
总结
学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!
最后如何才能让我们在面试中对答如流呢?
答案当然是平时在工作或者学习中多提升自身实力的啦,那如何才能正确的学习,有方向的学习呢?有没有免费资料可以借鉴?为此我整理了一份Android学习资料路线:
这里是一部分我工作以来以及参与过的大大小小的面试收集总结出来的一套BAT大厂面试资料专题包,在这里免费分享给大家,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家。需要的小伙伴们可以点击我的GitHub获取免费领取方式
好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,可以去我的主页加一下技术群。来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。
最后,祝愿即将跳槽和已经开始求职的大家都能找到一份好的工作!
这些只是整理出来的部分面试题,后续会持续更新,希望通过这些高级面试题能够降低面试Android岗位的门槛,让更多的Android工程师理解Android系统,掌握Android系统。喜欢的话麻烦点击一个喜欢再关注一下~
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
2239463)]
[外链图片转存中…(img-7sOd83f9-1710962239464)]
[外链图片转存中…(img-uTdzXgws-1710962239464)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-UiWP8r3r-1710962239464)]