android - 如何有效地更新 Android textviews?

标签 android performance textview

我正在开发一个遇到性能问题的 Android 应用程序。 我的目标是从 AsyncTask 接收字符串并将它们显示在 TextView 中。 TextView 最初是空的,每次其他进程发送一个字符串时,都会将它连接到 textview 的当前内容。 我目前使用 StringBuilder 来存储主字符串,每次收到新字符串时,我都会将其附加到 StringBuilder 并调用

myTextView.setText(myStringBuilder.toString())

问题是后台进程每秒最多可以发送100个字符串,我的方法效率不够。

每次都重绘整个 TextView 显然是个坏主意(时间复杂度 O(N²)),但我没有看到其他解决方案...

您是否知道 TextView 的替代方案可以在 O(N) 中完成这些连接?

最佳答案

只要字符串之间有一个换行符,您就可以使用 ListView 来附加字符串并将字符串本身保存在 ArrayList 或 LinkedList 中,当 AsyncTask 接收字符串时,您可以向其附加。

您也可以考虑简单地降低使 TextField 无效的频率;每秒说 10 次。这肯定会提高响应能力。像下面这样的东西可以工作:

static long lastTimeUpdated = 0;
if( receivedString.size() > 0 )
{
   myStringBuilder.append( receivedString );
}
if( (System.currentTimeMillis() - lastTimeUpdated) > 100 )
{
    myTextView.setText( myStringBuilder.getChars( 0, myStringBuilder.length() );
}

如果字符串突然出现——这样你的突发之间的延迟大于一秒——那么每次更新都会重置一个计时器,这将触发此代码再次运行以获取字符串的尾随部分最后一次爆发。

关于android - 如何有效地更新 Android textviews?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8556603/

相关文章:

c++ - 在 C++ 中,将正数转换为 1 并将负数转换为 0 的最快方法

Android - 具有不同背景颜色的TextView

xml - 没有 xml 的 Android View

python - 与迭代两个大型 Pandas Dataframes 相比提高了效率

Swift Final 类和函数

android - 如何使 TextView 显示为已禁用,但仍响应点击?

java - Android TextView.SetText(int resid) 是如何工作的?

android - 检查 SDCard 是否存在, bool 值始终为真

java - 我们如何为 android 中的 EditText 定义最小和最大自定义值之间的范围,例如 85 和 110

android - 我收到错误 "No instrumentation registered! Must run under a registering instrumentation"