Android 性能优化之启动速度优化,Android 面试资料集合
//...
<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。不过,如果在追求启动速度的情况下,在 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,可以得到两种数据。
· 单次执行最耗时的方法
· 执行次数最多的方法
要打开上面的面板,代码中一般有两种方式:
· 第一种方式:
首先选择跟踪范围,在想要根据的代码片段之间使用以下两句代码
Debug.startMethodTracing(“hello”);
Debug.stopMethodTracing();
生成的 traceview 文件会自动放在 SDCARD 上,没有 SDCARD 卡会出现异常,所以使用这种方式需要确保应用的 AndroidMainfest.xml 中的 SD 卡的读写权限是打开的,其中 hello 是 traceview 文件的名字,
然后用 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 分析界面。
两种方式的
对比:第一种方式更精确到方法,起点和终点都是自己定,不方便的地方是自己需要添加方法并且要导出文件,第二种方式的优缺点刚好相反。
关于应用启动加速,一般从以下几个方面来入手:
· 利用主题快速显示界面;
· 异步初始化组件;
· 梳理业务逻辑,延迟初始化组件、操作;
· 去掉无用代码、重复逻辑等。
开发过程中,对核心模块与应用阶段如启动时,使用 TraceView 进行分析,尽早发现瓶颈。
评论