APP性能优化---启动耗时优化

当我们再使用一个app应用时,如果这个app点击桌面图标后,比较长的时间都没有响应,那对这个app的第一印象就不是很好,甚至就直接卸载掉了,这简直是一个app致命的结果。
那么,我们如果做可以给用户一个比较好的使用体验呢,下面就一步一步来了解一下:

app启动状态

三个状态:冷启动,温启动,热启动。

1.冷启动:
在下面几个清空下出现:设备重新启动,或者新安装的app还没有启动使用过,这时候就是冷启动。系统进行冷启动后才创建应用进程。

2.热启动:
将Activity 从后台唤醒到前台来运行,此时应用的所有的activity还在内存中,不需要重新创建,初始化、绘制页面等工作。

3.温启动:
温启动和介于上述两种状态下的一个启动,他的开销要比热启动高。例如用户退出app后,再次重新启动app ,这时候app进程未必被销毁,虽然需要执行onCreate来重新创建来继续运行。

启动耗时的2-5-8 原则##

1.当启动耗时 < 2s,用户会觉得响应很快;

2.当启动耗时 2s<= && < 5s ,则响应速度还可以;

3.当启动耗时 》,则响应速度就很慢,不过还可以接受

4.当启动耗时 > 8s ,就会觉得很糟糕了,不可以接受

启动耗时统计

了解了上述启动的一些内容后,我们该如何统计启动耗时呢?实际上不同的应用业务场景需要初始化的内容不同,不同的终端设备,启动耗时都不同,即使是同一应用同一设备也会存在启动耗时不同的,所以启动耗时并没有一个统一的标准。我们之所有要做启动耗时统计,要满足产品对启动耗时的要求。

统计指令:
在命令行切换到adb的目录下:

adb shell  //进入shell命令

am   start -S -W   com.xxxx.xxx / XXXActivity

说明:
1.am 命令的 s , w都是大写
2.com.xxxx.xxx 是应用的包名
3. XXXActivity 是应用的main,launcher的activity 
4. 包名和activity之间是有一个 “   /  ”  (笔者因为漏写 / ,踩了很久的坑)

输出结果:

ThisTime: 968
TotalTime: 968
WaitTime: 978
Complete

Status: ok
ThisTime: 1028
TotalTime: 1028
WaitTime: 1041
Complete

Status: ok
ThisTime: 1029
TotalTime: 1029
WaitTime: 1046
Complete

说明:
ThisTime : 表示一连串启动Activity的最后一个Activity的启动耗时
TotalTime:表示新应用启动的耗时,包括新进程的启动和Activity的启动,但不包括前一个应用Activity pause的耗时
WaitTime:总的耗时,包括前一个应用Activity pause的时间和新应用启动的时间


所以我们只需要关心 total Time 的时间就可以了。(建议可以多次执行上述命令,统计一个大概的启动时间,比如笔者执行完后,大概耗时是在1s左右)

注:其他统计工具profiler 在内存优化中介绍

优化建议

有了上述统计的优化时间统计,我们就到启动页面去进行分析,发现在activity的onResume中做了异步的网络请求:

    //检查版本更新
    override fun onResume() {
        super.onResume()
            if (presenter != null) {
                presenter.requestForUpgrade()
            }
    }

那么这个耗时的请求我们是否可以在启动完成后进行呢,答案是肯定。下面就是优化后的代码:

//检查版本更新
 override fun onResume() {
        super.onResume()
        Looper.myQueue().addIdleHandler {
            if (presenter != null) {
                presenter.requestForUpgrade()
            }
            false
        }
    }

那么优化后的耗时统计又如何呢?我们执行命令看看结果:

Status: ok
ThisTime: 979
TotalTime: 979
WaitTime: 988
Complete

Status: ok
ThisTime: 952
TotalTime: 952
WaitTime: 961
Complete

Status: ok
ThisTime: 954
TotalTime: 954
WaitTime: 980
Complete

Status: ok
ThisTime: 996
TotalTime: 996
WaitTime: 1014
Complete

Status: ok
ThisTime: 956
TotalTime: 956
WaitTime: 976
Complete

可以看出我们得优化有那么一丢丢的效果,虽然不是很明显,但是就像“一分钱也是爱”一样的,积少成多,慢慢来优化。

在此仅做一些技术记录,供学习参考。优化进行中。。。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。