美文网首页
android app冷启动速度优化的几点思考

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

作者: 成虫_62d0 | 来源:发表于2018-02-08 19:27 被阅读0次

    冷启动的定义

    当用户启动一个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冷启动速度优化的几点思考

          本文链接:https://www.haomeiwen.com/subject/nbvttftx.html