我希望能够在指定的延迟后调用以下方法。在目标 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);
⋮
}