android app冷启动速度优化的几点思考

冷启动的定义

当用户启动一个app的时候,后台没有该进程,这时候需要重新启动一个进程,这个启动过程就是冷启动;
Application的构造器方法——>attachBaseContext()——>onCreate()——>Activity的构造方法——>onCreate()——>配置主题中背景等属性——>onStart()——>onResume()——>测量布局绘制显示在界面上。

启动时的白屏问题,可以在activity中的theme中设置 windowBackGround 为透明,windowIsTranslucent true,windowNoTitle true; 这里需要注意一个问题,那么activity的布局文件一定要设置背景,不然就全透明了。

优化的思考---要提高启动速度,那只有一条就是减少ui线程的负荷,尽量把ui线程的工作降低;
1.数据的延迟加载(app启动时,有些数据不是app启动的前置条件,有些初始化也不是前置条件)这些工作就可以延迟处理,或者放在异步线程处理。有时候反序列化的工作,json解析的工作都很耗时,这些工作可考虑延迟处理。
2.减少activity的布局层次,减少布局的重绘。

3.在合适的时候使用AsyncLayoutInflater,基本用法如下:

new AsyncLayoutInflater(this).inflate(  
                                     R.layout.activity_main,  
                                     null,  
                                     new AsyncLayoutInflater.OnInflateFinishedListener() {  
            @Override  
            public void onInflateFinished(View view, int resid, ViewGroup parent) {  
                //Do something with view  
            }});  

AsyncLayoutInflater有几个局限性
1、 parent的 generateLayoutParams() 函数必须是线程安全的。

2、 所有正在构建的views一定不能创建任何 Handlers 或者调用 Looper.myLooper 函数。

3、 不支持设置LayoutInflater.Factory也不支持LayoutInflater.Factory2

4、 不支持包含Fragments的inflatinglayouts

如果我们尝试异步的方式去inflate的layout不支持这种方式,那么inflation处理将会自动回退到主线程中

你可能感兴趣的:(android app冷启动速度优化的几点思考)