面试官:说一说Android启动优化

应用的启动速度对一个APP来说至关重要,会直接影响到用户体验,如果启动速度过慢会导致用户的流失,本文就启动速度优化分析,为优化启动速度提供一些思路。

1、应用启动分类

应用有三种启动状态,每种状态都会影响应用向用户显示所需的时间:冷启动、温启动和热启动。在冷启动中,应用从头开始启动。在另外两种状态中,系统需要将后台运行的应用带入前台。

1.1、冷启动

app冷启动可以分为两个阶段

第一阶段

1、加载并启动app

2、启动后立即显示一个空白的启动窗口

3、创建app进程

第二阶段

1、创建app对象

2、启动主线程

3、创建主Activity

4、加载布局

5、布置屏幕

6、首帧绘制

一旦应用进程完成首帧绘制,系统进程就会换掉当前显示的后台窗口,替换为主Activity。此时,用户可以开始使用应用

冷启动中,作为开发者,能干预的部分主要是Application的OnCreate阶段和Activity的onCreate阶段,如下图:

1.2、热启动

热启动时,系统将activity放到前台。如果应用程序的所有activity存在内存中,则应用程序可以避免重复对象初始化、渲染、绘制操作

1.3、温启动

温启动时,由于app的进程仍然存在,执行的是冷启动的第二阶段

1、创建app对象

2、启动主线程

3、创建主Activity

4、加载布局

5、布置屏幕

6、首帧绘制

温启动常见场景:

1、用户退出应用后又重启应用。进程可能继续运行。但应用从调用Activity的onCreate方法开始重新执行

2、内存不足,系统将应用杀死,然后用户重新启动。进程和Activity需要重启,但传递到onCreate的已保存的实例bundle对于完成启动有一定帮助

接下来来看下如何获得启动时间~

2、获取启动时间

2.1、使用adb命令获取

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

adb shell am start -W com.tg.test.gp/com.test.demo.MainActivity
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.tg.test.gp/com.test.demo.MainActivity }
Status: ok
LaunchState: COLD
Activity: com.tg.test.gp/com.test.demo.MainActivity
ThisTime: 1344
TotalTime: 1344
WaitTime: 1346
Complete

ThisTime: 最后一个Activity启动耗时

TotalTime: 启动时经历的所有Activity总耗时

WaitTime: AMS启动所有Activity的总时间(包括启动目标应用前的)

2.2、使用代码打点

public class LaunchTimer {

    private static long sTime;

    public static void startRecord() {
        sTime = System.currentTimeMillis();
    }
    public static void endRecord() {
        endRecord("");
    }
    public static void endRecord(String msg) {
        long cost = System.currentTimeMillis() - sTime;
        LogUtils.i(msg + "cost " + cost);
    }
}

该方式一般为Applicati

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值