我的目标是从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文本视图?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)