美文网首页Android专题
性能优化系列(一)冷启动优化。

性能优化系列(一)冷启动优化。

作者: 千夜零一 | 来源:发表于2021-05-25 15:50 被阅读0次

对于app的启动优化,常见的需要达到两种优化效果

第一种:需要进行视觉优化。

简而言之,就是用户视觉感官上觉得app启动速度变快了,一般方案是增加闪屏页LanuchActivity。指定其主题样式,增加图片并且背景透明化。

第二种:需要进行代码优化。(重要)

一般指冷启动优化。即:该应用程序在此之前没有被创建,发生在应用程序首次启动或者自上次被终止后的再次启动。简单的说就是app进程还没有,需要创建app的进程启动app。很多初始化耗时操作需要在application中做,在 Application 中完成繁重的初始化操作和复杂的逻辑就会影响到应用的启动性能,因此代码优化也就是优化这些初始化第三方库(组件)的时机。

application优化需要遵循以下原则:
    1. 必要的组件一定要在主线程中立即初始化(入口 Activity 可能立即会用到)
    1. 组件一定要在主线程中初始化,但是可以延迟初始化。
    1. 组件可以在子线程中初始化。

例如:

1、将Bugly,x5内核初始化,SP的读写,友盟等组件放到子线程中初始化。(子线程初始化不能影响到组件的使用)

 new Thread(new Runnable() {
            @Override
            public void run() {
                //设置线程的优先级,不与主线程抢资源
                Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
                //子线程初始化第三方组件
                Thread.sleep(5000);//建议延迟初始化,可以发现是否影响其它功能,或者是崩溃!
            }
        }).start();

2、将需要在主线程中初始化但是可以不用立即完成的动作延迟加载(原本是想在入口 Activity 中进行此项操作,不过组件的初始化放在 Application 中统一管理为妙.)

 handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                //延迟初始化组件
            }
        }, 3000);

app启动耗用总时长分析

需求背景 : 应用App通常会设置一个固定的闪屏页展示时间,例如2000ms,所以我们可以根据用户手机的运行速度,对展示时间做出调整,但是总时间仍然为 2000ms。

闪屏页展示总时间 = 组件初始化时间 + 剩余展示时间。

也就是2000ms的总时间,组件初始化了800ms,那么就再展示1200ms即可。

如何获取app的启动时间?

利用adb命令获取APP的启动时间:

adb shell am start -W 包名/界面名

例如:adb shell am start -W com.kc.splash/.SplashActivity 【错误】

adb shell am start -W com.kc.mvvmcomponent/com.kc.splash.SplashActivity 【正确】

组件化中需要:app包名/组件包名.activity


耗时对比

未进行启动优化的app冷启动耗时:

未优化

对application进行代码优化

/**
         * 启动优化
         */
        Thread {
            //设置子线程的优先级,不与主线程抢资源(必须设置优先级,不然会争抢主线程资源,无法优化启动时间)
            android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND)
            //子线程初始化第三方组件******

            //1、路由初始化
            ARouter.init(this)

            //2、自定义炫酷Logger拦截网络请求
            val formatStrategy: FormatStrategy = PrettyFormatStrategy.newBuilder()
                .showThreadInfo(true) // (Optional) Whether to show thread info or not. Default true
                .methodCount(5) // (Optional) How many method line to show. Default 2
                .methodOffset(7) // (Optional) Hides internal method calls up to offset. Default 5
                .tag("My custom tag") // (Optional) Global tag for every log. Default PRETTY_LOGGER
                .build()
            Logger.addLogAdapter(AndroidLogAdapter(formatStrategy)) // 初始化Logger

//            Thread.sleep(500) //建议延迟初始化,可以发现是否影响其它功能,或者是崩溃!
        }.start()

特别注意: //设置子线程的优先级,不与主线程抢资源(必须设置优先级,不然会争抢主线程资源,无法优化启动时间) android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND)
原因:使用Thread或者HandlerThread时,调用Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)设置优先级,否则仍然会降低程序响应,因为默认Thread的优先级和主线程相同。

优化后,明显发现冷启动耗时变短了~

优化后

启动优化成功!!!


扩展内容:

1、冷启动、温启动、热启动都是什么啊?

冷启动

冷启动指的是该应用程序在此之前没有被创建,发生在应用程序首次启动或者自上次被终止后的再次启动。简单的说就是app进程还没有,需要创建app的进程启动app。

比如开机后,点击屏幕的app图标启动应用。

温启动

温启动。温启动指的是App进程存在,但Activity可能因为内存不足被回收,这时候启动App不需要重新创建进程,只需要执行APP进程中的一些任务,比如创建Activity。

比如返回主页后,又继续使用其他的APP,时间久了或者打开的应用多了,之前应用的Activity有可能被回收了,但是进程还在。

热启动

热启动。热启动就是App进程存在,并且Activity对象仍然存在内存中没有被回收。

比如app被切到后台,再次启动app的过程。

2、闪屏页实现:可参考我的这篇文章>>app闪屏页如何实现?告别白屏!看这一篇就够了!

相关文章

  • iOS 性能优化三

    主要讲解APP冷启动的优化 iOS 性能优化一iOS 性能优化二iOS 性能优化三 1. APP 启动的分类 冷...

  • 冷启动优化

    冷启动优化主要优化两个方面 Application 性能优化 App启动页性能优化业务优化不在本章优化范围内。本章...

  • 性能优化系列(一)冷启动优化。

    对于app的启动优化,常见的需要达到两种优化效果 第一种:需要进行视觉优化。 简而言之,就是用户视觉感官上觉得ap...

  • Android 性能优化系列视频(三)

    Android 性能优化系列视频如下 Android 性能优化系列视频(四)Android 性能优化系列视频(五...

  • Android性能优化 - 消除卡顿

    性能优化系列阅读 Android性能优化 性能优化 - 消除卡顿 性能优化 - 内存优化 性能分析工具 - Tra...

  • Android性能优化 - 内存优化

    性能优化系列阅读 Android性能优化 性能优化 - 消除卡顿 性能优化- 内存优化 性能分析工具 - Trac...

  • 前端性能优化(中)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 《前端性能优化(上)...

  • 前端性能优化(下)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 《前端性能优化(中)...

  • iOS性能优化系列篇之“优化总体原则”

    iOS性能优化系列篇之“优化总体原则” iOS性能优化系列篇之“优化总体原则”

  • APP性能优化

    一、APP启动性能优化。 APP启动主要分冷启动和热启动,主要优化冷启动。 1.尽量减少didFinishLauc...

网友评论

    本文标题:性能优化系列(一)冷启动优化。

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