美文网首页
App 启动优化 之 背景知识

App 启动优化 之 背景知识

作者: 詹徐照 | 来源:发表于2019-03-03 21:59 被阅读5次

    启动类型

    冷启动

    click event -> IPC -> Process.start -> ActivityThread -> bindApplication -> LifeCycle -> ViewRootImpl

    热启动

    后台 -> 前台

    温启动

    Lifecycle

    启动相关任务

    1. 启动App
    2. 加载空白window
    3. 创建进程
    4. 创建Application
    5. 启动主线程
    6. 创建MainActivity
    7. 加载布局
    8. 布置屏幕
    9. 首帧绘制

    优化方向

    Application和Activity生命周期

    启动时间的测量

    方式1:adb命令(适合本地使用)

    adb shell am start -W packagename/首屏Activity(含有包名)
    
    JamesdeMBP:~ zhanxuzhao$ adb shell am start -W com.example.demo_0227/com.example.demo_0227.SplashActivity
    Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.demo_0227/.SplashActivity }
    Status: ok
    Activity: com.example.demo_0227/.MainActivity
    ThisTime: 123
    TotalTime: 285
    WaitTime: 304
    Complete
    

    ThisTime:最后一个Activity启动耗时(如MainActivity,不会包含前面的SplashActivity)

    TotalTime:所有Activity启动耗时

    WaitTime:AMS启动Activity总耗时

    ThisTime < TotalTime < WaitTime

    方式二:手动打点(可以线上统计)

    开始点:

    Application#attachBaseContext()
    

    结束点:

    方案一:首帧开始绘制(不推荐)

    onWindowFocusChanged
    

    方案二:真实数据展示(第一条feed加载:onBindViewHolder)

    onBindViewHolder
    holder.linearLayout.getViewTreeOvserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener(){
        @Override
        public boolean onPregraw(){
        LaunchTimer.endRecord();
        holder.linearLayout.getViewTreeObserver().removeOnPredrwaListener(this);
        return true;}
    }
    

    性能检测工具

    traceview

    Debug.startMethodTracing("fileName"); // 方法开始
    Debug.stopMethodTracing(); // 方法结束
    

    生成文件路径:sdcard/android/data/packagename/files

    image
    特点:
    可以统计方法调用关系、耗费时间。

    缺点:
    运行时开销严重,整体都会变慢。

    systrace

    结合 Android 内核数据, 生成 html 报告

    TraceCompat.beginSection("section name");
    TraceCompat.endSection();
    

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

    优雅获取方法耗时

    AOP(Aspect Oriented Programming)

    相关文章

      网友评论

          本文标题:App 启动优化 之 背景知识

          本文链接:https://www.haomeiwen.com/subject/hufvuqtx.html