android - 更新 TextView 时呈现缓慢

标签 android

在控制台的新 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 毫秒。当我停止触摸时,渲染时间会再次下降几秒钟,然后再次上升。

所以我想知道的是:

  1. 如此简单的 TextView 更新导致渲染时间过长是否正常?
  2. 这就是我的 Android Vitals 问题吗?因为它每秒只运行两次。问题可能出在其他地方吗?上面的代码是唯一在 GPU 分析中创造高标准的代码,应用程序的其他元素工作正常,具有多个 TextView 和图像的长 ListView 的渲染时间约为 8 毫秒。
  3. 我可以做些什么来减少这些绘制时间?我已经尝试删除 TextView 布局中的居中和引力,以及 wrap_content(如另一个答案中所建议的),但都没有任何效果。除此之外,我不确定该怎么做。

最佳答案

如果你在你的 xml 中放置了很多层,它会强制 android 渲染多次(如果你有很多层,请重构你的代码!!)。 我强烈推荐阅读此书:https://developer.android.com/training/improving-layouts/index.html

关于多次渲染 TextView,渲染速度取决于您运行应用程序的设备!

关于android - 更新 TextView 时呈现缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44594711/

相关文章:

android.net.wifi.STATE_CHANGE : not triggered on Wifi disconnect

android - 如何将 ImageView 数组添加到 ListView 的 ArrayAdapter

android - Firebase signInWithEmailAndPassword 和 createUserWithEmailAndPassword 在 Android 中不起作用

android - Ionic v2 创建项目问题

android XML 从 XML 获取资源 ID(整数)

抽屉导航 fragment 中的 Android 操作栏选项卡

android - 如何清除 View 中所有可选元素的焦点?

javascript - Phonegap 重启加速度计

java - 执行 aapt 时出错 : Return code -1073741819 (Eclipse)

android - hpet 的模拟器错误和创建传感器端口