我有Activity
TextView
,每次后台线程调用TextView
上的方法时,我都会设置Activity
的标签和颜色。它正常工作,直到我离开Activity
并重新输入它。在这种情况下,TextView
未更新,因为未调用在UI线程上发布以执行的Runnable
。也许我需要在onResume()
中实现一些东西,但我不知道那会是什么。
以下是创建TextView
时Activity
的分配方式:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manage_nameserver);
statusView = (TextView) findViewById(R.id.statusNameserverButton);
...
}
这是后台线程调用的方法,它更新了TextView
:
public void running(boolean running) {
final int color;
final String text;
if (running) {
color = Color.GREEN;
text = "Running";
} else {
color = Color.RED;
text = "Stopped";
}
statusView.post(new Runnable() {
@Override
public void run() {
statusView.setTextColor(color);
statusView.setText(text);
}
});
}
在调试器中,我看到在我重新输入running()
后调用Activity
时,永远不会调用传递给Runnable
的{{1}}。检查调试器中的statusView.post()
对象属性显示成功和失败情况之间没有区别。恢复导致statusView
不被调用的Activity
后,我不知道有什么不同。我尝试在Runnable
中重新分配TextView
对象,使用相同的代码在onResume()
中分配它,但这没有帮助。
答案 0 :(得分:1)
首先检查恢复后的活动是否与原始活动相同,因为原始活动可能已被Android销毁。另外,检查statusView.post(...)
是否返回true。