美文网首页
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性能优化

    Ui性能优化 参考博客:Android UI性能优化实战 识别绘制中的性能问题Android UI性能优化详解 1...

  • Android 性能优化

    app性能优化 android优化分为: 内存优化 UI优化 电量优化 apk瘦身优化 启动优化 下面通过各种百度...

  • Android UI优化

    Android性能优化 - UI篇Android性能优化 - CPU/GPU篇 一、UI层级优化 借助工具:Hie...

  • 收集_性能优化

    Android性能优化(一)之启动加速35%Android性能优化(二)之布局优化面面观Android性能优化(三...

  • Android性能优化 - CPU/GPU篇

    Android性能优化 - UI篇Android性能优化 - CPU/GPU篇 前言 本篇主要讲解APP性能优化路...

  • 性能优化

    Android UI性能优化实战 识别绘制中的性能问题性能优化(二) UI 绘制优化 通过Hierarchy Vi...

  • Android性能优化--内存优化

    转载自:Android性能优化--内存优化 上一篇文章关于Android性能优化--启动优化探讨了启动优化相关的知...

  • Android系统原理

    Android性能优化(一)App启动原理分析及启动时间优化 - CSDN博客 Android性能优化(二)布局渲...

  • Android性能优化之路

    Android性能优化目录 1 Android性能优化之内存泄漏2 Android性能优化之启动速度3 Andro...

  • 性能问题_01参考文章

    参考文章 : Android性能优化(一)之启动加速35% Android性能优化(二)之布局优化面面观 Andr...

网友评论

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

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