Android:在恢复活动时,无法在活动视图上发布Runnable

时间:2014-03-08 06:38:18

标签: android textview android-activity resume ui-thread

我有Activity TextView,每次后台线程调用TextView上的方法时,我都会设置Activity的标签和颜色。它正常工作,直到我离开Activity并重新输入它。在这种情况下,TextView未更新,因为未调用在UI线程上发布以执行的Runnable。也许我需要在onResume()中实现一些东西,但我不知道那会是什么。

以下是创建TextViewActivity的分配方式:

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()中分配它,但这没有帮助。

1 个答案:

答案 0 :(得分:1)

首先检查恢复后的活动是否与原始活动相同,因为原始活动可能已被Android销毁。另外,检查statusView.post(...)是否返回true。