android app冷启动以及优化

冷启动的概念

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


冷启动和热启动的区别

上面讲了冷启动,那么什么是热启动呢?

热启动:用户点击了back或者home键退出app应用,下次再次重新启动该应用,热启动的应用是保留在后台的

这是热启动和冷启动在概念上的区别

现在随便写个demo,然后写个类去继承Application


package com.demoaapp;
import android.app.Application;
import android.util.Log;
/**
 * Created by zhouguihzi on 2017/9/4.
 */
public class MyApp extends Application {
    private static final String TAG ="MyApp";
    @Override
    public void onCreate() {
        super.onCreate();
        Log.e(TAG,"app启动是冷启动");
        try {
            Thread.sleep(6000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}


现在跑起来,看看log以及现象.首先看下最近打开的app进程




然后我点击图标打开这个app:注意标题栏文字的变化




log信息:




那我现在退出这个app,然后再点击进来:




这个是热启动是不是MainActivity界面和标题栏瞬间就出来了,而不像冷启动那样要好久才出来,当然了是因为我在Application中做了一个线程休眠的时间,这是模拟一些放在application中的操作.

从上面的 分析也可以看的出热启动和冷启动的另外一个区别就是冷启动是走Application,而热启动时不走Application的


冷启动的时间计算

这个时间值是从应用启动(创建进程的时候)开始计算,到完成视图的第一次绘制(即Activity内容对用户可见)为止,这个其实不需要自己去算,你打开app的时候系统log就会有:




冷启动流程

1:系统会创建一个新的进程给app

2:创建并初始化Application以及SplashActivity或者MainActivity(反正是应用的第一个activity)

3:执行完成onCreate() onstart() onResume()三个方法

4:contentview会经历够measure,layout,draw过程然后把布局可见并显示出来


冷启动流程总结如下图:



知道了冷启动的流程,是不是想起来我们平时在SplashActivity中启动的时候黑屏的问题,这个主要和style有关.可以去查下怎么解决


冷启动的优化


1:减少onCreate()方法的工作量

2:不要在Application做相关业务的操作

3:不要在Application中做耗时的操作 比如IO操作

4:不要以静态变量的方式在Application中保存数据 易造成内存泄露 比如你写了一个获取屏幕宽和高的封装类,但是引用了activity,

5:减少UI层级

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值