计划的周期性任务在第二个TextView.setText()冻结

时间:2012-03-15 21:50:09

标签: android user-interface scheduled-tasks

我正在尝试安排一项任务,每秒更新一次TextView。只要我有这条线,随后注释,注释掉,一切正常。 Logcat显示如下:

Task
IN
OUT
Task
IN
OUT
...

但如果我取消注释statusLabel.setText(),这就是我所看到的:

Task
IN
OUT
TASK
IN 

这五行都是我得到的。出于某种原因,它似乎停止了,当它第二次尝试再次设置文本时。


我的代码:

public class MyActivity extends Activity {

    TextView statusLabel;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.control);
        statusLabel = (TextView) findViewById(R.id.statusLabel);

        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        scheduler.scheduleAtFixedRate(
                new Runnable() {
                    public void run() {
                        Log.d("Datalogger","Task");
                        updateStatus();
                    }
                }, 0, 1, TimeUnit.SECONDS);
    }

    private void updateStatus() {
        Log.d("Datalogger","IN");
        statusLabel.setText("X");  // !! If I comment out this line, 
        Log.d("Datalogger","OUT"); //    everything works
    }
}

2 个答案:

答案 0 :(得分:2)

问题是您正在尝试从UI(主)线程以外的线程更新UI。在runnable中使用runOnUiThread(Runnable action),使用new runnable调用updateStatus()。

答案 1 :(得分:1)

您无法从后台线程更新UI。在日志中甚至应该出现错误。使用Activity#runOnUiThread(Runnable)