ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

冷启动优化相关问题

2022-07-10 21:34:47  阅读:144  来源: 互联网

标签:初始化 -- application 冷启动 应用 进程 相关 优化


什么是冷启动

冷启动的定义

冷启动就是启动前,系统中没有该应用的任何进程信息

对应的是第一次打开应用和杀掉应用进程后再次进入应用。

冷启动 / 热启动的区别

热启动:

就是用户按了返回键或home键退出应用后,马上又重新启动应用

区别:

定义不同:

冷启动启动前,没有该应用的进程,需要重新创建该应用的进程

热启动启动前,已经有该应用的进程,不需要重新创建应用的进程,应用进程是保存在后台的。

启动特点不同:

冷启动:
由于会重新创建进程,因此会先初始化application,在初始化Activity,然后再进行测量,布局和绘制等等,最后显示在界面上

热启动:
由于后台已经存在应用进程,不会重新创建application,而是直接走Activity,进行测量布局绘制等操作,然后显示在界面上

因为一个应用从创建到销毁,其application只初始化一次。

这里通过代码描述一下:

image
这里application里面做了一个延迟操作,延迟三秒。

此时如果是冷启动会等待三秒后才能显示mainactivity,热启动不会有延迟。

冷启动时间的计算

从应用启动,创建进程开始算起,到完成视图的第一次绘制(即Activity内容对用户可见)为止.

冷启动的流程

  1. Zygote进程中fork创建出一个新的进程

  2. 创建和初始化Application类,创建MainActivity类

  3. inflate布局、当onCreate/onStart/onResume方法都走完

  4. ContentView的measure/layout/draw显示在界面上

Application的构造方法 --> attachBaseContext() --> onCreate() --> Activity的构造方法 --> onCreate() --> 配置主题中背景等属性 --> onStart() --> onResume() --> 测量布局绘制显示在屏幕上。

如何对冷启动进行优化

  1. 减少onCreate方法的工作量

  2. 不要让application参与业务操作
    把每个业务模块都用到的数据可以在application里面初始化,但是不能把业务相关的放在application里初始化。

  3. 不要在application里进行耗时操作
    比如在application里面在一些IO操作,从sd卡中读取数据,这些操作是不能放在application中的。

  4. 不要以静态变量的方式在application中保存数据
    因为静态变量的生命周期和app生命周期一致。可能会造成内存泄漏或者数据安全等问题。

  5. 布局 / mainThread
    尽量减少布局的复杂性,在布局view的测量过程中,是非常耗时的。布局的层级越庞大,app就需要越多的时间去填充它。
    为了节约时间,不填充那些不需要在启动时就展示的view,这里可以通过ViewStub来实现。需要的时候按需加载

mainThread中做资源的初始化,也会减慢启动速度,所以在这里可以通过懒加载,或者将资源的加载放到子线程中。

标签:初始化,--,application,冷启动,应用,进程,相关,优化
来源: https://www.cnblogs.com/cfdroid/p/16464112.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有