如何在android中设置计时器

新手上路,请多包涵

在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 许可协议

阅读 711
2 个回答

通过 java.util.Timerjava.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) 进行调度。

原文由 MannyNS 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题