在android中设置计时器以启动任务(我创建的一个不会更改UI的函数)的正确方法是什么?使用 Java 方式: http ://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.html
或者在android(android的处理程序)中有更好的方法?
原文由 n179911 发布,翻译遵循 CC BY-SA 4.0 许可协议
在android中设置计时器以启动任务(我创建的一个不会更改UI的函数)的正确方法是什么?使用 Java 方式: http ://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.html
或者在android(android的处理程序)中有更好的方法?
原文由 n179911 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在使用一个处理程序并且可以运行来创建一个计时器。我将它包装在一个抽象类中。只需派生/实现它,你就可以开始了:
public static abstract class SimpleTimer {
abstract void onTimer();
private Runnable runnableCode = null;
private Handler handler = new Handler();
void startDelayed(final int intervalMS, int delayMS) {
runnableCode = new Runnable() {
@Override
public void run() {
handler.postDelayed(runnableCode, intervalMS);
onTimer();
}
};
handler.postDelayed(runnableCode, delayMS);
}
void start(final int intervalMS) {
startDelayed(intervalMS, 0);
}
void stop() {
handler.removeCallbacks(runnableCode);
}
}
请注意,在要执行的代码之前调用 handler.postDelayed
- 这将使计时器更加关闭,计时为“预期”。但是,如果计时器运行频繁并且任务( onTimer()
)很长 - 可能会有重叠。如果要在任务完成后开始计数 intervalMS
,移动 onTimer()
调用上面的一行。
原文由 elcuco 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答1.3k 阅读✓ 已解决
2 回答2.7k 阅读
2 回答1.7k 阅读
1 回答2.1k 阅读
1 回答1.2k 阅读
1 回答1.2k 阅读
1 回答588 阅读✓ 已解决
通过 java.util.Timer 和 java.util.TimerTask 使用定时器的标准 Java 方法在 Android 中运行良好,但您应该知道此方法会创建一个新线程。
您可以考虑使用非常方便的 Handler 类 (android.os.Handler) 并通过
sendMessageAtTime(android.os.Message, long)
或sendMessageDelayed(android.os.Message, long)
向处理程序发送消息。收到消息后,您可以运行所需的任务。第二种选择是创建一个 Runnable 对象并通过 Handler 的函数postAtTime(java.lang.Runnable, long)
或postDelayed(java.lang.Runnable, long)
进行调度。