安卓定时器计划

8
以下是我在项目中使用的代码片段来安排任务。
mTimer = new Timer();
mTimer.schedule(new TimerTask() {

 @Override
 public void run() {
  //Do Something
 }

}, interval, interval);

这个代码运行良好。当设置的时间间隔到达后,我能够收到事件通知。但是,如果将日期设置为小于当前设置的日期,则无法发送任何事件通知。

有人知道为什么会出现这种情况吗?


请详细阐述您的问题。 - Vivek Mishra
但是为什么计时器应该运行在当前日期之前?为什么不直接禁用选择早于当前日期的日期呢? - Vivek Mishra
你是指从手机设置中吗? - Vivek Mishra
1
在Android中使用Timer几乎总是一个坏主意。 - Kevin Krumwiede
有一件事我建议你使用系统设置获取当前日期。这样的话,如果系统日期发生改变,你的代码也会随之改变。 - Vivek Mishra
显示剩余2条评论
2个回答

7

Timer 在改变系统时钟时会失败,因为它是基于不连续的System.currentTimeMillis()

Timer 不是 Android 类。它是一个 Java 类,在 Android API 中存在以支持现有的非 Android 库。在新的 Android 代码中使用 Timer 几乎总是一个坏主意。对于应用程序活动或服务生命周期内发生的定时事件,请使用 HandlerHandler 基于 SystemClock.uptimeMillis(),这是连续的。对于即使您的应用程序没有运行也应该发生的定时事件,请使用 Alarm


太好了!正是我需要的。我已经使用处理程序解决了我的问题,但是我很好奇第一次使用计时器出了什么问题! :) - Neji

0

使用这段代码.. 这将会对你有所帮助..

Timer t;
seconds = 10;

public void startTimer() {
        t = new Timer();
        //Set the schedule function and rate
        t.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if (seconds == 0) {
                            t.cancel();
                           seconds = 10;
                      // DO SOMETHING HERE AFTER 10 SECONDS
                       Toast.makeText(this,"Time up",Toast.LENGTH_SHORT).show();
                        }
                        seconds -= 1;
                    }
                });
            }
        }, 0, 1000);
    }

我需要知道为什么当我把日期改成比当前日期更早的日期时它不起作用的原因。 - Neji

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接