我可以在不同的时间间隔运行计时器吗?

时间:2017-10-02 05:07:57

标签: java android timer timertask

其实我想问一下,我可以将数据库的值提供给定时器延迟吗?

    Timer timer = new Timer();
    TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                  // whatever
                    }
                }
            });
        }
    };
    timer.schedule(timerTask,2000,**myDelay**); //here at my delay

在myDelay,我可以通过数据库提供不同的值吗?或者它必须修复?

2 个答案:

答案 0 :(得分:1)

如果您要使用不同的值始终更改时间,建议您使用

schedule(TimerTask task, long time)

每当您从数据库获得新的时间时,只需像这样创建一个新的Timer()

time = getNewTimeFromDB();
createNewTask(time);
....
private void createNewTask(long time) {
    Timer timer=new Timer();
    TimerTask timerTask=new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    // whatever
                }
            });
        }
    };
    timer.schedule(timerTask,time);
}

关于这一点的好处是你不必每次都取消计时器,因为它只能运行一次。

答案 1 :(得分:0)

您是否应该改变解决问题的方法,创建一个函数来从数据库中返回时间FunctionToGetDelayFromDB();

Timer timer=new Timer();
long time = FunctionToGetTimeFromDB();
TimerTask timerTask=new TimerTask() {
    @Override
    public void run() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                    // whatever
                    timer.schedule(timerTask, System.currentTimeMillis() + FunctionToGetDelayFromDB());
                }
            }
        });
    }
};
timer.schedule(timerTask, System.currentTimeMillis() + FunctionToGetDelayFromDB());

这应该适用于你想要实现的目标......