gpt4 book ai didi

android - 简单的 TextView.setText 导致 40% 的 CPU 使用率

转载 作者:IT老高 更新时间:2023-10-28 22:14:42 34 4
gpt4 key购买 nike

运行我的应用程序会导致我的手机使用约 40% 的 CPU:

final String position = String.format("%02d:%02d:%02d", time.getHours(), time.getMinutes(),
time.getSeconds());
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
c.mTxtPosition.setText(position);
...

通过注释掉 setText 方法,CPU 使用率下降到预期的约 4% 水平。该方法每秒调用一次,并且会刷新 ImageViews、CustomViews ...,而不会导致相同的负载过剩。除了 CPU 使用率之外,dalvik 仅通过调用 setText() 就不断报告大约 10-1000 个对象的垃圾收集。

像这样创建一个跟踪文件:

Debug.startMethodTracing("setText");
c.mTxtPosition.setText(position);
Debug.stopMethodTracing();

traceview 将以下方法按各自的独占 CPU% 列为 Top 5:

  • ViewParent.invalidateChildInParent(16%)
  • View.requestLayout(11%)
  • ViewGroup.invalidateChild(9%)
  • TextView.setText(7%)
  • 顶级(6%)

有人对此有解释吗?

最佳答案

我前段时间自己注意到了,我觉得问题是每次调用setText时,文本框的大小都会发生变化,因此需要整个屏幕进行重新布局(昂贵)。

我自己还没有尝试过,但是如果您的文本框很简单并且可以设置为相对固定的大小,则可以尝试将 TextView 子类化并创建一个不会在 setText 上调整自身大小而只是绘制的 View 什么可以进入现有区域?这样可以节省很多时间。

也许 setText 已经有一个标志可以让它做到这一点,但我不知道它,虽然我没有仔细搜索。

关于android - 简单的 TextView.setText 导致 40% 的 CPU 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10804436/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com