我在 android 中使用延迟处理程序,但它不起作用

I am using handler for delay in android but it's not working

我要延迟两秒。每 2 秒我想更改文本,为此,我正在使用这样的处理程序,但它不起作用,它只显示你好。它根本没有改变它只显示我写的第二个。代码是这样的,

      private Handler handler = new Handler();

      int i=5;

      private TextView textView ;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    textView = (TextView)findViewById(R.id.hello);
    textView.setText("Android Things !!");
    hello_first.run();


}

private Runnable hello_first = new Runnable() {
    @Override
    public void run() {

            textView.setText("Nice Work");
            handler.postDelayed(this,5000);
            textView.setText("Hello");
            handler.postDelayed(this,2000);

            i = i+1;
            if(i==5)
            handler.removeCallbacks(this);
    }
};

它很容易使用

Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
            textView.setText("Hello");

        },2000);


handler.postDelayed(new Runnable() {
 @Override
 public void run() {
textView.setText("Nice Work");},5000);

试试这个代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    textView = (TextView)findViewById(R.id.hello);
    textView.setText("Android Things !!");
    handler.postDelayed(hello_first,5000);
    handler.postDelayed(hello_second,2000);
}

private Runnable hello_first = new Runnable() {
    @Override
    public void run() {
        textView.setText("Nice Work");
    }
};
private Runnable hello_second = new Runnable() {
    @Override
    public void run() {
        textView.setText("Hello");
    }
};

我希望这对你有用。

Handler handler = new Handler();
  Runnable task = new Runnable() {
    @Override
    public void run() {
        textView.setText("Nice Work");
        handler.postDelayed(this,2000);
        textView.setText("Hello");
        handler.postDelayed(this,2000);
    }
};
task.run();

停止任务

handler.removeCallbacks(task);

A Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue.

纠正你的postDelayed方法。

Causes the Runnable r to be added to the message queue, to be run after the specified amount of time elapses.

演示结构

textView.setText("Nice Work");
final Handler handlerOBJ = new Handler();
    handlerOBJ.postDelayed(new Runnable() {
      @Override
      public void run() {
        // YOUR WORK
       textView.setText("Hello");
      }
    }, 5000); // 5S delay

您可以登录并查看实际发生的情况...

每次你打电话handler.postDelayed(this, 5000); 它将创建两个 Runnable 实例并将它们发送到处理程序。所以队列中runnable的数量增加得非常快。

你可以设置一个文本列表和索引,然后把runnable丢给handler,postDealyed为2000毫秒。使用文本列表和索引查看应为文本视图设置哪些文本。

您使用的 postDelayed 不正确。看起来您希望它以与 Thread.sleep 相同的方式工作。然而事实并非如此。

这是您要实现的目标的正确实现:

private Handler handler = new Handler();
private TextView textView;

private int i = 0;
private boolean flip;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    textView = (TextView) findViewById(R.id.hello);
    handler.post(hello_first);
}

private Runnable hello_first = new Runnable() {
    @Override
    public void run() {
            if(++i == 5) {
                handler.removeCallbacks(this);
                return;
            }

            if(flip) {
                textView.setText("Nice Work");  
            } else {
                textView.setText("Hello");
            }
            flip = !flip;

            handler.postDelayed(this, TimeUnit.SECONDS.toMillis(2));           
    }
};