我有一个线程,使用一个可运行对象更新textview:
// runnable to allow updating the UI from the thread
Runnable updateTextView = new Runnable() {
public void run() {
mTextView.setText(mDisplayedText);
mTextView.invalidate();
}
};
然而,文本内容无法正确更新。它可以在最开始的几次写入时运行,但之后只写入一半的文本,留下了先前文本的后一半部分。
将屏幕旋转会导致其刷新并正确绘制。
TextView是多行的,我向其中写入一个包含\n字符以表示换行的字符串。
上面的invalidate调用没有任何影响。
有什么想法吗?
更新:mDisplayedText在包含我的线程类的活动中声明。在线程的运行循环中,我调用:
mDisplayedText = getText()
runOnUiThread(updateTextView);
循环包含100毫秒的睡眠时间,但实际上只有在文本发生更改时才会写入,因此实际上不到一秒钟。
答案:
稍微有点尴尬。问题出在其他代码中。
我在同一个数据包中接收UDP套接字,并将packet.getData读取到一个新字符串中。 这将整个数据包复制到字符串中,而不仅仅是接收到的那个消息中的字节。 第二个问题是每次需要调用packet.setLength来设置整个数据包可用的长度。
感谢您的回答!