ad预加载开机启动脚本 Android App 启动优化全记录

03/15 01:49:57 来源网站:268辅助卡盟网

ad预加载开机启动脚本 Android App 启动优化全记录

应用启动概述应用启动的一般流程

应用的启动,从桌面点击应用图标到主界面用户可操作,大致遵循下面的流程:

fedora 开机启动脚本_aix开机启动脚本_ad预加载开机启动脚本

可以看到应用启动过程中,最重要的两个进程就是 SystemServer 和 App Process . 其职责划分如下:

冷启动和热启动

这里还需要引入冷启动和热启动的概念,这也是我们经常会碰到的两个概念

启动速度的测量

各家应该都有自己的方案,关键在于如何定义启动结束的点,这个也是一直困扰我的一个地方,有的应用很好定义,有的应用则因为比较复杂,无法直接衡量启动速度。像 adb 这种方法自己玩玩可以,生产环境没啥用;录屏本身就有性能损耗..

这里我建议大家学习历时1年,上百万行代码!首次揭秘手淘全链路性能优化(上)中提到的测量方法:自动化、稳定、持续集成

通过OCR提取图片中的文字信息作为关键特征。该算法的优势:1. 在于应用页面上基本都是有文字的, OCR也可以识别到图片上的文字, 文字出现则图片加载完成, 和用户体感是一致的;2. 文字作为特征,过滤掉了很多图片特征可能带来的噪声, 减少了算法调试的工作量;另外阿里集团内有非常成熟和优秀的OCR服务——读光,文档识别率超过99.7%, 使用水滴平台封装的OCR服务,可以快速接入和使用。最终的识别方案就是基于OCR识别来进行的App 优化启动窗口优化

启动窗口,也叫启动页、SplashWindow、StartingWindow 等,指的是应用启动时候的预览窗口。iOS App 强制有一个启动页,用户点击桌面 App 图标之后,系统会立即显示这个启动窗口,等 App 主页加载好之后再显示主页面。Android 也有类似的机制 (启动窗口这个是 Android 系统提供的),但是也提供了一个接口,让应用开发者设置是否显示这个启动窗口(默认是显示),部分开发者会把这个系统提供的启动窗口禁掉,启动自己的窗口。

但是启动自己的窗口需要的时间要比直接显示系统的启动窗口所花的时间要长,这就会导致用户在使用的时候,点击图标启动 App 的时候,有一定的延迟,表现在点击图标过了一段时间才进行窗口动画进入 App,我们要尽量避免这种情况

线程优化

线程优化主要是减少 CPU 调度带来的波动,让启动时间更稳定。如果启动过程中有太多的线程一起启动,会给 CPU 带来非常大的压力,尤其是比较低端的机器。过多的线程同时跑会让主线程的 Sleep 和 Runnable 状态变多, 增加了应用的启动速度,优化的过程中要注意:

系统调度优化

应用启动的时候,如果主线程的工作过多,也会造成主线程过于繁忙,下面几个系统调度相关的点需要注意:

启动过程中繁忙的 cpu

ad预加载开机启动脚本_fedora 开机启动脚本_aix开机启动脚本

启动过程中繁忙的 SystemServer

aix开机启动脚本_ad预加载开机启动脚本_fedora 开机启动脚本

GC 优化

启动过程中减少 GC 的次数

可以参考下面这篇文章 支付宝客户端架构解析:Android 客户端启动速度优化之「垃圾回收」)

IO 优化

启动过程中负载比较高卡盟,有许多系统 IO 都在此时发生,这时候 IO 的性能下降会比较快,此时 App 中的 IO 操作会比平时更慢一些,尤其是在性能比较差的机器上。

IO 分网络 IO 和磁盘 IO ,启动过程中不建议进行网络 IO ,对于磁盘 IO 则要细扣,邵文在高手课里面有讲到:

我们要清楚启动过程中读了什么文件、多少个字节、 Buffer 是多大,使用了多长时间、在什么线程等一系列信息进行启动过程中的 IO 监控,微信在监控 IO 时发现有用户的 db 文件达到了 500MB

aix开机启动脚本_fedora 开机启动脚本_ad预加载开机启动脚本

下面图中可以看到低内存的时候ad预加载开机启动脚本,启动应用主线程有较多的 IO 等待(UI Thread 这一栏,橘红色代表 IO 等待 )

    暂无相关资讯
ad预加载开机启动脚本 Android App 启动优化全记录