一个App的启动流程的至关重要 ,这是用户启动App后对App的第一印象。
在一些小型项目上,如何去优化启动显得无足轻重,但是当一个项目达到足够的量,业务设计足够多时,若不注意app的启动优化,则会出现很多问题。例如一些三方插件的初始化,网络请求初始化,数据库,io操作,动画等等,这无疑都会增加初始化的工作量。
如果全都把一些事务放在App启动的时候,则会造成卡顿,黑白屏等现象,这样会带来极差的用户体验。
今天,来总结下自己平时会在项目中用到的App启动优化。
大致的优化方向可以从下图看到:
我们都知道,app分为冷启动和热启动;
所以我们可以使用一些工具和方法来查看,App冷启动期间,花费了多少时间,在哪些时候花费了过多的时间以进行优化。
方法一:
常规获取时间方法无非就是在方法执行前记录下时间,在方法执行完毕后记录时间,两者时间之差就是该方法执行的时间.
或者使用 adb 命令统计?adb shell am start -S -W 包名/启动类的全限定名
方法二:使用工具
1、通过Android SDK自带的Debug。
@Override
public void onCreate(final Bundle b) {
setTheme(R.style.BrowserTheme);
Intent intent = getIntent();
NLog.i(LOGTAG,"onCreate");
super.onCreate(b);
//开始记录,且该方法可以设置文件大小和路径
Debug.startMethodTracing("browser.trace");
Controller controller=createController();
mController = controller;
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
controller.handleThirdPartyIntent(intent);
//结束记录
Debug.stopMethodTracing();
}
如上可以在目录下可以生成如下文件:
/sdcard/Android/data/com.xxx.xx.browser/files/browser.trace
使用Android自带的Profile工具导出该文件:
可以看到以下效果
1处可以看出有多少线程。
2处可以看出具体方法的耗时。
3处有两个选项:
根据方法执行时间的具体情况,可以进行启动的优化,例如延迟加载,网络请求,IO操作可以新开一个线程去执行。
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">@drawable/lunch</item> //闪屏页图片
<item name="android:windowFullscreen">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item><!--显示虚拟按键,并腾出空间-->
</style>
?