在控制台的新 Android Vitals 部分,我收到警告,超过 60% 的 session 受到缓慢的 UI 渲染时间的影响(错过 Vsync:1.02%,缓慢的 UI 线程:14.29%,缓慢的绘制命令:96.84 %)。我在我的测试设备上打开了 GPU 分析(使用应用程序的生产版本),我看到以下 TextView 更新导致渲染时间超过 16 毫秒(大约 24-30 毫秒):
updateTimer = new Timer();
updateTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
timeLeftView.setText(timeLeftString);
}
});
}
}, 100, 500);
当我注释掉 textView 更新时,屏幕上没有任何更改,分析器也没有创建任何新栏。
一个线索是,当使用计时器打开 Activity 时,计时器的前 3-4 次更新在 8 毫秒左右呈现,但随后上升到 24-30 毫秒左右。
另一个线索是,当我触摸屏幕的任何部分时,渲染时间会回落到 8 毫秒左右并持续几秒钟,然后再次上升到 24-30 毫秒。当我停止触摸时,渲染时间会再次下降几秒钟,然后再次上升。
所以我想知道的是:
- 如此简单的 TextView 更新导致渲染时间过长是否正常?
- 这就是我的 Android Vitals 问题吗?因为它每秒只运行两次。问题可能出在其他地方吗?上面的代码是唯一在 GPU 分析中创造高标准的代码,应用程序的其他元素工作正常,具有多个 TextView 和图像的长 ListView 的渲染时间约为 8 毫秒。
- 我可以做些什么来减少这些绘制时间?我已经尝试删除 TextView 布局中的居中和引力,以及 wrap_content(如另一个答案中所建议的),但都没有任何效果。除此之外,我不确定该怎么做。
最佳答案
如果你在你的 xml 中放置了很多层,它会强制 android 渲染多次(如果你有很多层,请重构你的代码!!)。 我强烈推荐阅读此书:https://developer.android.com/training/improving-layouts/index.html
关于多次渲染 TextView,渲染速度取决于您运行应用程序的设备!
关于android - 更新 TextView 时呈现缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44594711/