android app冷启动慢,android app冷启动优化

一、应用启动方式

1、冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。

2、热启动:应用启动过后,后台还保留了应用的进程,这种启动应用方式叫热启动。

二、应用启动流程

在安卓系统上,应用在没有进程的情况下,应用的启动都是这样一个流程:当点击app的启动图标时,安卓系统会从Zygote进程中fork创建出一个新的进程分配给该应用,之后会依次创建和初始化Application类、创建MainActivity类、加载主题样式Theme中的windowBackground等属性设置给MainActivity以及配置Activity层级上的一些属性、再inflate布局、当onCreate/onStart/onResume方法都走完了后最后才进行contentView的measure/layout/draw显示在界面上,所以直到这里,应用的第一次启动才算完成,这时候我们看到的界面也就是所说的第一帧。

即:Application的构造器方法——>attachBaseContext()——>onCreate()——>Activity的构造方法——>onCreate()——>配置主题中背景等属性——>onStart()——>onResume()——>测量布局绘制显示在界面上。

三、计算冷启动时间

1、在application中添加下面代码,记录好开始时间

public class MyApplication extends Application {

private final String TAG = "MyApplication";

public static long startTime ;

@Override

public void onCreate() {

super.onCreate();

Log.e(TAG,"startTime="+System.currentTimeMillis());

startTime = System.currentTimeMillis();

2、在MainActivity中的onResume()中打印出启动时间。

Log.e(TAG,"startTime="+(System.currentTimeMillis()-startTime));

3、可以使用adb shell命令测量启动时间,执行成功后将返回三个测量到的时间。

adb shell am start -W [packageName]/[packageName.MainActivity]

ThisTime:一般和TotalTime时间一样,除非在应用启动时开了一个透明的Activity预先处理一些事再显示出主Activity,这样将比TotalTime小

TotalTime:应用的启动时间,包括创建进程+Application初始化+Activity初始化到界面显示。

WaitTime:一般比TotalTime大点,包括系统影响的耗时。

四、优化用户体验

1、可以在styles.xml的AppTheme中添加下面代码,就是将窗口设置成透明,让用户看不到白屏。

true

true

五、减少启动时间

1、在application中不要进行太多的耗时操作,除非必须的,现在很多第三方的框架都需要在application中初始化,导致开机时间变得很长,开机慢大部分原因在此。

2、对于sp的初始化,因为sp的特性在初始化的时候会对数据全部读出来存在内存中,所以这个初始化放在主线程中不合适,反而会延迟应用的启动速度,对于这个最好放在异步线程中处理。

3、对于MainActivity,由于在获取到第一帧前,需要对contentView进行测量布局绘制操作,尽量减少布局的层次,考虑StubView的延迟加载策略,当然在onCreate、onStart、onResume方法中避免做耗时操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值