这是如何安排Java方法在1秒后运行吗?

2022-09-04 23:58:25

在我的方法中,我想调用另一个将在1秒后运行的方法。这就是我所拥有的。

final Timer timer = new Timer();

timer.schedule(new TimerTask() {
    public void run() {
          MyMethod();
          Log.w("General", "This has been called one second later");
        timer.cancel();
    }
}, 1000);

这是应该做的吗?自从我在Android上以来,还有其他方法可以做到这一点吗?可以毫无问题地重复吗?


答案 1

有几种选择。但这是Android特定的一个。

如果你的线程正在使用(并且通常所有的 's、 ' 和 ' 的方法 、 、 等 都是从这样的线程调用的),那么你可以使用 。下面是一个示例:LooperActivityBroadcastRecevierServiceonCreateonReceiveonDestroyHandler

Handler handler = new Handler();
handler.postDelayed(new Runnable()
{
     @Override
     public void run()
     {
         myMethod();
     }
}, 1000);

请注意,您不必在此处取消任何内容。这将仅在创建处理程序的同一线程上运行一次。


答案 2

我建议使用 ScheduledExecutorService 而不是 ,而不是Timer

final ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);

exec.schedule(new Runnable(){
    @Override
    public void run(){
        MyMethod();
    }
}, 1, TimeUnit.SECONDS);

推荐