我正在Eclipse中编写Android应用程序,并使用TextView
在屏幕上显示一些文本。另一个线程有时会更改此视图的文本,使用以下代码:
runOnUiThread(new Runnable() {
@Override
public void run() {
view.setText(newLyric);
}
});
我想调试setText
行以检查是否正在传入正确的字符串(对于某些文本,它不是自动换行以适应屏幕,而对于其他文本,但是这是一个不同的问题)。当我在该行上放置断点时,文本总是自动换行。当我禁用/删除断点时,通常不会被包装的文本(它是确定性的)不是自动换行的。
这对我来说没什么意义。我见过this question,我理解背后的原因,但我不明白为什么会出现这个问题。任何人都可以对此有所了解吗?我正在测试设备,如果这有任何区别。
编辑:事实证明这是竞争条件,现在我只需要弄清楚如何修复它......显然我只能选择一个'正确'的答案,但是谢谢你各位有用的评论:)
答案 0 :(得分:5)
答案 1 :(得分:2)
尝试为断点设置属性暂停VM 。默认行为是暂停正在运行的线程。如果你从其他线程中受到“污染”,这应该可以防止这种情况发生。
答案 2 :(得分:1)
由于您的代码在其自己的线程中运行,因此设置屏幕的代码(因此,决定或不执行自动换行)将在调用之前或之后运行,因为它在另一个线程中运行。
例如,在TextViews中,事件将触发并被OnEditorActionListener捕获。