【发布时间】:2014-03-08 06:38:17
【问题描述】:
我有一个Activity 和一个TextView,每次后台线程调用Activity 上的方法时,我都会设置TextView 的标签和颜色。在我离开 Activity 并重新输入之前,它可以正常工作。在这种情况下,TextView 不会更新,因为发布用于在 UI 线程上执行的Runnable 不会被调用。也许我需要在onResume() 中实现一些东西,但我不知道那会是什么。
下面是在创建Activity 时分配TextView 的方式:
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);
}
});
}
在调试器中,我看到当我重新输入Activity 后调用running() 时,传递给statusView.post() 的Runnable 永远不会被调用。在调试器中检查statusView 对象属性显示成功和失败情况之间没有区别。我不知道恢复 Activity 后有什么不同会导致 Runnable 不被调用。我尝试重新分配onResume() 中的TextView 对象,使用在onCreate() 中分配它的相同代码,但这没有帮助。
【问题讨论】:
-
先查看resume后的Activity是否和原来的Activity是一样的,原来的Activity可能已经被Android销毁了。另外,检查
statusView.post(...)是否返回true。 -
感谢凯,这使我能够解决问题。请发表您的评论作为答案,以便我接受并明确解决方案。
标签: android textview android-activity resume ui-thread