在 运行() 中重复两次

Twice repetition in run()

我希望以下代码块每秒写入一次 "Hello!"。但是它写了两次。我做错了什么?

    handler = new Handler();
    final Runnable r = new Runnable() {
        public void run() {
            Log.d("message", "Hello!");             
            handler.postDelayed(this, 1000);
        }
    };

    handler.postDelayed(r, 1000);
    runOnUiThread(r);

它写了两次,因为您在 UI 线程队列中发布了两次。一个与处理程序有关,另一个与可运行对象有关。

handler.postDelayed(r, 1000);
runOnUiThread(r);

根据你的要求把其中的一个去掉两个。在我看来,您只需要 handler

做一个简单的实现,创建一个TimerTask

Timer timer = new Timer ();
timer.schedule (new TimerTask () {
            @Override
            public void run () {
               // Print your Hello here...
            }
        }, 0, 1000);