我尝试使用配置文件GPU呈现和 systrace 工具来分析重新绘制TextView。有两种重绘方式。单击视图时第一次调用setText()
,第二次调用由rx计时器Observable.interval (1000, TimeUnit.MILLISECONDS)
触发。在第一种情况下,配置文件GPU渲染显示略微超过16毫秒(img 1),并且systrace显示"昂贵的度量/布局传递"警告。更新计时器时,渲染时间显着增加(img 2),但systrace不再显示"昂贵的测量/布局通过"警告,"测量/布局"阶段完全从图表中消失,但是"调度延迟"出现警告。在这些情况下调用重绘有什么区别?
timerLabel.setOnClickListener(v -> {
timerLabel.setText(TimeUtils.getTime(this.timerValue));
});
Observable.interval(1000, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(t -> {
timerLabel.setText(TimeUtils.getTime(this.timerValue));
})
.subscribe();