2024年安卓最全android进阶篇08、启动速度、卡顿与布局优化简述,42岁程序员面试

学习分享

在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了

很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2021最新上万页的大厂面试真题

image

七大模块学习资料:如NDK模块开发、Android框架体系架构…

image

2021大厂面试真题:

image

只有系统,有方向的学习,才能在短时间内迅速提高自己的技术,只有不断地学习,不懈的努力才能拥有更好的技术,才能在互联网行业中立于不败之地。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

添加背景图片并不能对启动速度有优化,只是为了提高用户体验度;








protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
、、、
}

二、卡顿分析

卡顿分析跟启动速度的分析的操作基本相同,也是使用Android studio自带的profiler分析器进行分析;

  1. 打开Profiler界面,保持应用运行在设备上或者模拟器上;
  2. 点击cpu运行模块进入cpu分析界面;
  3. 在Select CPU Profiling mode中选择Trace System Calls,并点击record;
  4. 然后在设备上操作我们应用想要分析的界面,操作完成后点击stop;
  5. 此时会自动生成SystemTraceRecording界面;

我们可以在生成的界面上进行分析,界面显示了许多有用的信息,比如每一帧的消耗时间,如果时间过长会变红,并且在下面时间条显示具体方法名;

我们还可以在右边的Top down界面查看具体方法调用栈信息;跟启动速度优化的右侧界面相同;

三、布局分析

布局方面的优化主要可以从三个方面进行分析;

1、层级优化

framework层在对布局进行measure、layout和draw操作时是一层一层布局递归调用的,因此我们的布局层次结构越深,则耗时越久,我们应该尽量减少布局层级,扁平化处理布局;

我们可以使用Android studio自带的Layout Inspector布局分析器进行布局的分析;

  1. 在设备或者模拟器上运行我们的应用;
  2. Tools – layoutinspector进入布局分析界面,系统会自动检测应用进程并展示;
  3. 在左侧视图树界面查看视图层级;右侧属性界面查看view属性;

使用merge标签

有一些布局需要在多处使用时,我们可以将其抽离成一个单独的布局文件,然后在需要的地方直接include即可,此类布局就可以使用merge标签,这个布局在附加到别的布局中时,merge标签会自动删除掉,如果不使用merge标签,而是使用布局标签包裹,那么就会产生一层冗余的布局嵌套;

使用ViewStub标签

当布局中某个view或者viewgroup在特殊情况下才会显示时,我们可以使用viewstub标签,它不可见不占用资源,只有当我们设置为visible或者调用inflater方法时才会被初始化;

2、过度渲染

我们可以通过开启开发者模式的渲染选项查看是否存在过度绘制; 过度绘制一般采用考虑通过如下方式解决;

  • 移除掉布局中不需要的背景
  • 尽量使视图层级结构扁平化

3、布局加载优化

异步加载 可以通过使用androidX中的库进行布局的异步加载
implementation "androidx.asynclayoutinflater:asynclayoutinflater:1.0.0"
new AsyncLayoutInflater(this)
.inflate(R.layout.activity_main, null, new AsyncLayoutInflater.OnInflateFinishedListener() {
@Override
public void onInflateFinished(@NonNull View view, int resid, @Nullable ViewGroup parent){
setContentView(view);
//…
}
});

最后

给大家送上我成功跳槽复习中所整理的资料,由于文章篇幅有限,所以只是把题目列出来了

image

image

image

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

这里获取](https://bbs.csdn.net/topics/618156601)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值