Part 2 App启动优化

Part 2 App启动优化

一 App启动优化介绍

1、背景

用户的第一体验,八秒定律(70%用户放弃等待)

2、启动分类

App startup time官方教程(https://developer.android.google.cn/topic/performance/vitals/launch-time

冷启动

耗时最多,衡量标准

ClickEvent(用户点击) -> IPC(触发ipc) -> Process.start(进程的创建) -> ActivityThread(单独进程app的入口类似main) -> bindApplication(通过反射创建Application) -> LifeCycle(我们的activity) -> ViewRootImpl(界面的绘制)

热启动

最快

后台 -> 前台

温启动

较快

LifeCycle(只重走activity的生命周期)

3、相关任务

冷启动之前

启动app、加载空白window、创建进程(这三个都是系统行为,无法多做干涉)

随后任务

创建Application、创建主线程、创建MainActivity、加载布局、布置屏幕、首帧绘制

4、优化方向

Application和Activity的生命周期(我们开发者能控制的)

二 启动时间测量方式

1、adb命令方式

adb shell am start -W packagename/首屏Activity

ThisTime:最后一个Activity的启动耗时

TotalTime:所有Activity的启动耗时

WaitTime:AMS启动Activity的总耗时

特点:线下使用方便,不能带到线上、非严谨精确时间

adb命令显示的启动时间

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);
    }
}

启动位置放置在Application的attachBaseContext中,结束位置放置在MainActivity中

特点:精确,可带到线上,推荐使用

误区:onWindowFocusChange只是首帧时间

正解:真实数据展示,Feed第一条数据展示

三 启动优化工具选择

1、traceview

图形形式展示执行时间、调用栈等,信息全面,包含所有线程

使用方式

    第一种:
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Resource Page Description 在以前的文章中,我曾多次强调应用程序中异步化的重要性。尤其对于IO密集型操作,异步执行对于应用程序的响应能力和伸缩性有非常关键的影响。正确使用异步编程能够使用尽可能少的线程来执行大量的IO密集型操作。可惜的是,即时异步编程有避免线程阻塞等诸多好处,但是这种编程方式至今没有被大量采用。其原因有很多,其中最主要的一点可能就是异步模型在编程较为困难,导致许多开发人员不愿意去做。 异步,则意味着一个任务至少要被拆分为“二段式”的调用方式:一个方法用于发起异步请求,另一个方法用于异步任务完成后的回调。与传统方法调用方式相比,异步调用时的中间数据不能存放在线程栈上,方法之间的也不能简单地通过参数传递的方式来共享数据。此外,传统方法调用中的try…catch…finally,using等关键字都无法跨越方法边界,因此异步编程在处理异常,保护资源等方面也需要花更大的精力才行。如果一不小心,轻则造成资源泄露,重则使整个应用程序崩溃。 因此,无论是微软官方还是社区中都出现了一些简化异步编程方式的组件,例如微软并行与协调运行时和Wintellect's .NET Power Threading Library中的AsyncEnumerator。同时,我基于AsyncEnumerator构建了一个AsyncTaskDispatcher组件,使多个有依赖关系的异步操作之间的协作调用得以大大简化。 以上是引用,自己做了个更简单的demo

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值