zoukankan      html  css  js  c++  java
  • APP启动优化

    APP启动优化

    关于APP启动优化

    • 启动分类

      • 冷启动:

        耗时最多,衡量标准

        Click Event -> IPC -> Process.start -> ActivityThread -> bindApplication -> LifeCycle -> ViewRootImpl

      • 热启动

        最快

        后台 -> 前台

      • 温启动

        较快

        LifeCycle 它只会重走Activity的声明周期,而不会再进行进程的创建、Application的创建等。

      冷启动之前

      • 启动APP

      • 加载空白Window

      • 创建进程

        冷启动之前的行为时系统的行为,我们是没有办法干预的。

      随后任务

      • 创建Application
      • 启动主线程
      • 创建MainActivity
      • 加载布局
      • 布置屏幕
      • 首帧绘制
    • 优化方向

      • Application和Activity生命周期

    启动时间测量方式

    • adb命令

      adb shell am start -W packagename/(包名)首屏Activity

      相关输出:

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

      • TotalTime:所有Activity启动耗时

      • WaitTime:AMS启动Activity的总耗时

      adb命令方式:线下使用方便,但是不能带到线上,而且非严谨精确时间。

    • 手动打点

      启动时埋点,启动结束埋点,二者差值。

      误区:onWindowFocusChanged只是首帧时间。

      正解:真实数据展示。

      手动打点方式:精确,可带到线上使用,注意避开误区选择数据真正显示作为测量时间点。addOnDrawListener。

    启动优化工具

    • traceview

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

      Debug.startMethodTracing("文件名");

      Debug.stopMethodTracing();

      生成文件存放在sd卡:Android/data/packagename/files

      traceview工具运行时开销严重,整体都会变慢。可能会带偏优化方向。

    • systrace

      结合Android内核数据,声明html报告,在API18以上使用,推荐向下兼容的TraceCompact。

      轻量级,开销小;能直观反映CPU利用率。

    获取方法耗时

    • 常规方式:侵入性强,工作量大。

    • AOP方式(Aspect Oriented Programming,面向切面编程):针对同一类问题的统一处理。无侵入添加代码。

      AspectJ的使用。

    异步优化

    • 优化技巧:Theme切换,感觉上的块。

    • 异步优化思想:子线程分担主线程任务,并行减少时间。

    • 注意事项:

      一部分代码不符合异步要求

      需要在某阶段完成

      区分CPU密集型和IO密集型任务。

    异步初始化

    • 常规异步痛点

      代码不优雅

      场景不好处理(依赖关系)

      维护成本高

    • 启动器

      核心思想:充分利用CPU多核,自动梳理任务顺序。

      启动流程:代码Task话,启动逻辑抽象为Task。根据所有任务的依赖关系,排序生成一个有向无环图。多线程按照排序后的优先级依次执行。

    延迟初始化方案

    启动优化其他方案

  • 相关阅读:
    安装包安装服务,点修复出现的错误”Error 1001:指定的服务已存在“ 解决办法
    C# tostring 格式化输出 (转)
    WPF button 如何区分click和doubleclick
    二叉树算法
    关于OA流程相关数据表的设计
    没事干写写流程审批数据库的设计
    挂载system.img并提取文件
    使Checkbox禁用,不可选
    Android显示网速的另一种方法
    C语言 解压华为固件
  • 原文地址:https://www.cnblogs.com/chen-ying/p/12542178.html
Copyright © 2011-2022 走看看