协慌网

登录 贡献 社区

在 Android 中延迟后如何调用方法

我希望能够在指定的延迟后调用以下方法。在目标 c 中,有类似以下内容:

[self performSelector:@selector(DoSomething) withObject:nil afterDelay:5];

android 和 java 中的此方法是否等效?例如,我需要能够在 5 秒钟后调用一个方法。

public void DoSomething()
{
     //do something here
}

答案

科特林

Handler().postDelayed({
  //Do something after 100ms
}, 100)


爪哇

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
  @Override
  public void run() {
    //Do something after 100ms
  }
}, 100);


在我的情况下,我无法使用其他任何答案。我改用了本地 Java Timer。

new Timer().schedule(new TimerTask() {          
    @Override
    public void run() {
        // this code will be executed after 2 seconds       
    }
}, 2000);

注意:当问题未将 Android 指定为上下文时,将给出此答案。对于特定于 Android UI 线程的答案, 请点击此处。


看起来 Mac OS API 允许当前线程继续运行,并安排任务以异步方式运行。在 Java 中,等效功能由java.util.concurrent包提供。我不确定 Android 可能会施加哪些限制。

private static final ScheduledExecutorService worker = 
  Executors.newSingleThreadScheduledExecutor();

void someMethod() {
  ⋮
  Runnable task = new Runnable() {
    public void run() {
      /* Do something… */
    }
  };
  worker.schedule(task, 5, TimeUnit.SECONDS);
  ⋮
}