• FPS检测


    目的:检测绘制过程中的FPS数量。

    获取DectorView的ViewTreeObserver,感知UI绘制的开始

    private void addDrawListener(final Activity activity) {
    activity.getWindow().getDecorView().post(new Runnable() {
    @Override
    public void run() {
    activity.getWindow().getDecorView().getViewTreeObserver().removeOnDrawListener(FPSTracer.this);
    activity.getWindow().getDecorView().getViewTreeObserver().addOnDrawListener(FPSTracer.this);
    }
    });
    }

    @Override
    public void onDraw() {
    isDrawing = true;
    }

    复制代码
    通过Choreographer.FrameCallback,感知UI绘制的结束

    @Override
    public void doFrame(long lastFrameNanos, long frameNanos) {
    if (!isInvalid && isDrawing && isEnterAnimationComplete() && mTraceConfig.isTargetScene(getScene())) {
    handleDoFrame(lastFrameNanos, frameNanos, getScene());
    }
    isDrawing = false;
    }
    复制代码
    理论上用户更关心的是绘制过程中FPS过低导致的卡顿(UI静止的情况下,用户是感知不到FPS低的)

    在doFrame方法中,记录每一帧的数据,其中scene这个字段标识一个页面

    @Override
    public void onChange(final Activity activity, final Fragment fragment) {
    this.mScene = TraceConfig.getSceneForString(activity, fragment);
    }
    复制代码
    onChange的默认实现是通过Application的ActivityLifecycleCallbacks回调感知Activity的变化

    @Override
    public void onActivityResumed(final Activity activity) {
    ...
    if (!activityHash.equals(mCurActivityHash)) {
    for (IObserver listener : mObservers) {
    listener.onChange(activity, null);
    }
    mCurActivityHash = activityHash;
    }
    ...
    }

    复制代码
    FPS数据默认是2分钟分析一次(前台情况下),切后台时后台轮询线程停止。


    /**
    * report FPS
    */
    private void doReport() {
    ...
    //数据分析逻辑可行阅读
    }

  • 相关阅读:
    mybatis批量操作问题总结
    activity判断流程结束和删除流程
    mybaties controller中总会优先执行方法
    mybaties接受 对象.属性 参数
    Tomcat发布Maven项目遇到的种种异常(转:http://blog.csdn.net/zhang6622056/article/details/9772951)
    activiti5用户任务分配
    maven部署项目异常
    sql分组按条件统计count case when then
    服务器管理—DNS
    ftp服务
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11295902.html
Copyright © 2020-2023  润新知