写点什么

Android 性能优化之启动速度优化,2021Android 最新大厂面试真题

作者:嘟嘟侠客
  • 2021 年 11 月 27 日
  • 本文字数:2458 字

    阅读完需:约 8 分钟

· 1、在 Application 的构造器方法、attachBaseContext()、onCreate()方法中不要进行耗时操作的初始化,一些数据预取放在异步线程中,可以采取 Callable 实现。


· 2、对于 sp 的初始化,因为 sp 的特性在初始化时候会对数据全部读出来存在内存中,所以这个初始化放在主线程中不合适,反而会延迟应用的启动速度,对于这个还是需要放在异步线程中处理。


· 3、对于 MainActivity,由于在获取到第一帧前,需要对 contentView 进行测量布局绘制操作,尽量减少布局的层次,考虑 StubView 的延迟加载策略,当然在 onCreate、onStart、onResume 方法中避免做耗时操作。


遵循上面三种策略可明显提高 app 启动速度。


优化应用启动时的体验


对于应用的启动时间,只能是尽量的避免一些耗时的、非必要的操作在主线程中,这样相对可以缩减一部分启动的耗时,另外一方面在等待第一帧显示的时间里,可以加入一些配置以增加体验,比如加入 Activity 的 background,这个背景会在显示第一帧前提前显示在界面上。


1、先为主界面单独写一个主题 style,设置一张待显示的图片,这里我设置了一个颜色,然后在 manifest 中设置给 MainActivity:


<style name="AppTheme.Launcher">


<item name="android:windowBackground">@drawable/bule</item>


</style>


//...


<activity


android:name=".MainActivity"


android:label="@string/app_name"


android:theme="@style/AppTheme.Launcher">


<intent-filter>


<action android:name="android.intent.action.MAIN" />


<category android:name="android.intent.category.LAUNCHER" />


</intent-filter>


</activity>


2、然后在 MainActivity 中加载布局前把 AppTheme 重新设置给 MainActivity:


@Override


protected void onCreate(Bundle savedInstanceState) {


setTheme(R.style.AppTheme);


super.onCreate(savedInstanceState);


setContentView(R.layout.activity_main);


}


这样在启动时会先显示 background,然后待界面绘制完成再显示主界面:



3.2Glide 及其他图片框架


Glide 是一个很好用的图片加载框架,除了常用的图片加载、缓存功能以外,Glide 支持对网络层进行定制,比如换成 OkHttp 来支持 HTTP 2.0。不过,如果在追求启动速度


《Android 学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享


的情况下,在 Splash 页或主界面加载某一张图片时,往往是第一次使用 Glide,由于 Glide 没有初始化,会导致这次图片加载的时间比较长(不管本地还是网络),特别是在其他操作也在同时抢占 CPU 资源的时候,慢的特别明显!而后面再使用 Glide 加载图片时,还是比较快的


Glide 初始化耗时分析:Glide 的初始化会加载所有配置的 Module,然后初始化 RequestManager(包括网络层、工作线程等,比较耗时),最后还要应用一些解码的选项(Options)


解决方案:在 Application 的 onCreate 方法中,在工作线程调用一次 GlideApp.get(this)


override fun onCreate() { super.onCreate() // 使用 Anko 提供的异步工作协程,或者自行创建一个并发线程池


doAsync {


GlideApp.get(this) // 获取一个 Glide 对象,Glide 内部会进行初始化操作


}


}


3.3TraceView 的使用 - 数据采集与数据分析


TraceView 是什么,TraceView 是 Android 平台特有的数据采集和分析工具,主要用做热点分析,找出最需要优化的点。TraceView 从代码层面分析性能问题,针对每个方法来分析,比如当我们发现我们的应用出现卡顿的时候,我们可以来分析出现卡顿时在方法的调用上有没有很耗时的操作,通过 TraceView,可以得到两种数据。


· 单次执行最耗时的方法


· 执行次数最多的方法



要打开上面的面板,代码中一般有两种方式:


· 第一种方式:


  1. 首先选择跟踪范围,在想要根据的代码片段之间使用以下两句代码


Debug.startMethodTracing(“hello”);


Debug.stopMethodTracing();


生成的 traceview 文件会自动放在 SDCARD 上,没有 SDCARD 卡会出现异常,所以使用这种方式需要确保应用的 AndroidMainfest.xml 中的 SD 卡的读写权限是打开的,其中 hello 是 traceview 文件的名字,


  1. 然后用 adb 导出 traceview 文件。


adb pull sdcard/hello.trace C:\Users\lwf\Desktop


2. 然后启动 Android Device Monitor–>File–>openFile,打开 traceview 文件即可。


· 第二种方式:


1.同样是要先打开 Android Device Monitor



2.先选择应用进程,然后点击 Start Method Profiling(开启方法分析),按钮会变为 Stop Method Profiling(停止方法分析),开启方法分析后,对应用的目标页面进行测试操作,测试完毕后停止方法分析,界面会自动跳转到 DDMS 的 trace 分析界面。


两种方式的对比:第一种方式更精确到方法,起点和终点都是自己定,不方便的地方是自己需要添加方法并且要导出文件,第二种方式的优缺点刚好相反。


四、总结




关于应用启动加速,一般从以下几个方面来入手:


· 利用主题快速显示界面;


· 异步初始化组件;


· 梳理业务逻辑,延迟初始化组件、操作;

总结

其实要轻松掌握很简单,要点就两个:


  1. 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。

  2. 多练。 (视频优势是互动感强,容易集中注意力)


你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。


对于很多初中级 Android 工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。


以上就是总结的关于在面试的一些总结,希望对大家能有些帮助,除了这些面试中需要注意的问题,当然最重要的就是刷题了,这里放上我之前整理的一份超全的面试专题 PDF


还有?高级架构技术进阶脑图、Android 开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。


【Android 核心高级技术 PDF 文档,BAT 大厂面试真题解析】



这里只是整理出来的部分面试题,后续会持续更新,希望通过这些高级面试题能够降低面试 Android 岗位的门槛,让更多的 Android 工程师理解 Android 系统,掌握 Android 系统。喜欢的话麻烦点击一个喜欢在关注一下~


本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

用户头像

嘟嘟侠客

关注

还未添加个人签名 2021.03.19 加入

还未添加个人简介

评论

发布
暂无评论
Android性能优化之启动速度优化,2021Android最新大厂面试真题