美文网首页
Android UI 性能优化 -- 启动优化

Android UI 性能优化 -- 启动优化

作者: Iimly | 来源:发表于2019-04-26 20:05 被阅读0次

    提要:

    • 以下仅为个人查阅资料,视频总结所得,如有错误,请指出谢谢

    优化流程:

    • 本文优化是针对启动时App的启动性能和用户体验进行优化

    体验优化:

    • 在Android Studio 2.0之后,将程序安装到新手机上时,首次启动会出现一个个短暂白屏的现象,但是在后面的版本迟迟没有修复这个我们所认为的bug,那我认为这就不是一个Google技术上的bug:


      白屏展示
    解决方案:
    • 在style文件定义主题
     <style name="AppTheme.Launcher1">
            <!--取消windowBackground 或者设置启动图片-->
            <item name="android:windowBackground">@null</item>
            <!--取消window预览视图-->
            <item name="android:windowDisablePreview">true</item>
        </style>
    

    在当前activity引用当前主题
    效果:


    简单优化效果
    • 注意:体验优化仅为一种伪优化方式,只是优化了用户的体验,在性能上并没有得到提升

    性能优化:

    • 在性能优化方面,我仅仅是针对当Application的onCreate()方法到Activity的onCreate()这之间进行优化操作,具体操作如下:
    • 在Application中,我在onCreate()方法中进行了大量的初始化操作,利用API自带的计时工具Deg.startMethodTraing(file.getAbsolutePath())开始计时,并在 Debug.stopMethodTracing()结束计时,并将结果存入app1.trace文件中
     @Override
        public void onCreate() {
            super.onCreate();
            File file = new File(Environment.getExternalStorageDirectory(), "app1.trace");
            Log.i(TAG, "onCreate: " + file.getAbsolutePath());
            //把分析结果存在一个文件
            Debug.startMethodTracing(file.getAbsolutePath());
            //对全局属性赋值
            mContext = getApplicationContext();
            mMainThread = Thread.currentThread();
            mMainThreadId = android.os.Process.myTid();
            mMainLooper = getMainLooper();
            mHandler = new Handler();
            //因为LQRUIKit中已经对ImageLoader进行过初始化了
             
                    initNim();
                    initImagePicker();
                    initOkHttp();//可以懒加载
            NIMClient.init(this, loginInfo(), options());
            Debug.stopMethodTracing();
        }
    
    • 运行App生成app1.trace文件,将文件拖入Android Studio中:


      app1.trace导入展示

    我们可以看到红色矩形区域内的Item可以onCreate()中的方法引用一一对应,并在Total栏下面分别显示各个方法所执行的时长。

    • 优化:
      接下来我们开始优化:
      优化主要为将耗时的一些操作进行异步处理
        @Override
        public void onCreate() {
            super.onCreate();
            File file = new File(Environment.getExternalStorageDirectory(), "app1.trace");
            Log.i(TAG, "onCreate: " + file.getAbsolutePath());
            //把分析结果存在一个文件
            Debug.startMethodTracing(file.getAbsolutePath());
            //对全局属性赋值
            mContext = getApplicationContext();
            mMainThread = Thread.currentThread();
            mMainThreadId = android.os.Process.myTid();
            mMainLooper = getMainLooper();
            mHandler = new Handler();
            //因为LQRUIKit中已经对ImageLoader进行过初始化了
            initImageLoader(getApplicationContext());
            new Thread(){
                @Override
                public void run() {
                    //如果要用线程来节约了这些初始化的时间
                    initNim();
                    initImagePicker();
                    initOkHttp();//可以懒加载
                }
            }.start();
            NIMClient.init(this, loginInfo(), options());
            Debug.stopMethodTracing();
        }
    

    再次运行App:


    优化后

    可以明显看到优化后和优化之前明显的差异,在使用异步初始化的时候需要注意节点:

    • 1.里面的API不能去创建handler
    • 2.不能有UI操作
    • 3.对异步要求不高

    生命不止,学习不止,与君共勉

    相关文章

      网友评论

          本文标题:Android UI 性能优化 -- 启动优化

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