如何实现界面秒开

260 阅读1分钟

界面秒开实现

界面秒开就是一个小的启动优化

可以借鉴启动优化及布局优化

Systrace,优雅异步+优雅延迟初始化

异步Inflate、X2C、绘制优化

提前获取页面数据

界面秒开率统计

onCreate到onWindowFocusChanged

特定接口

Lancet

轻量级Android AOP框架

编译速度快,支持增量编译

API简单,没有任何多余代码插入apk

github.com/eleme/lance…

@Proxy 通常用于对系统API调用的Hook

@Insert常用于操作App与library的类

public class ActivityHooker {

    public static ActivityRecord sActivityRecord;

    static {
        sActivityRecord = new ActivityRecord();
    }

    public static String trace;

    @Insert(value = "onCreate",mayCreateSuper = true)
    @TargetClass(value = "android.support.v7.app.AppCompatActivity",scope = Scope.ALL)
    protected void onCreate(Bundle savedInstanceState) {
        sActivityRecord.mOnCreateTime = System.currentTimeMillis();
        Origin.callVoid();
    }

    @Insert(value = "onWindowFocusChanged",mayCreateSuper = true)
    @TargetClass(value = "android.support.v7.app.AppCompatActivity",scope = Scope.ALL)
    public void onWindowFocusChanged(boolean hasFocus) {
        sActivityRecord.mOnWindowsFocusChangedTime = System.currentTimeMillis();
        LogUtils.i("onWindowFocusChanged cost "+(sActivityRecord.mOnWindowsFocusChangedTime - sActivityRecord.mOnCreateTime));
        Origin.callVoid();
    }
}

界面秒开监控维度

总体耗时

生命周期耗时

生命周期间隔耗时