处理程序和Runnable

时间:2017-03-25 07:00:31

标签: android

我在文档中读到,当我们实现Runnable时,我们正在创建一个新线程并发布在该线程内运行的任何代码,我们使用handler在uithread上执行UI更新。

但在我的下面的例子中

 private class AutoIncrementer implements Runnable {
    @Override
    public void run() {
        if(plusButtonIsPressed){
            incrementValue();
            handler.postDelayed( new AutoIncrementer(), REPEAT_INTERVAL_MS);
        }
    }
}

在这里,我使用handler.postDelayed()以递增的值更新UI 并再次实施onLongClickListener()

plusButton.setOnLongClickListener(
        new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View arg0) {
                plusButtonIsPressed = true;
                handler.post(new AutoIncrementer());
                return false;
            }
        }
    );

我再次使用handler.post(new AutoIncrementer()) .....当我通过handler.postDelayed()更新UI时,为什么需要使用它?

1 个答案:

答案 0 :(得分:4)

Runnable不是新线程,它只是一段代码,可以"运行"。

handler.postonLongClick AutoIncrementer启动onLongClick的第一次运行。然后在该代码中,它需要安排下一次检查(因为data.frame只被调用一次,而不是重复按下按钮)。