安卓 - 如何每隔固定时间重复执行一个函数?

4

如何在可以更改时间的情况下按照定义的时间安排函数? 我发现我可以使用timer&timerTask或handler来完成它。问题在于它不会按照我定义的时间重复,而是随机重复。

    runnable = new Runnable() {

        @Override
        public void run() {
            //some action
            handler.postDelayed(this, interval);
        }
    };

            int hours = settings.getIntervalHours();
            int minutes = settings.getIntervalMinutes();

            long interval = (hours * 60 + minutes) * 60000;

            changeTimerPeriod(interval);

private void changeTimerPeriod(long period) {
    handler.removeCallbacks(runnable);
    interval = period;
    runnable.run();
}

你可以使用 Handler。你可能会在这里得到你想要的精确解决方案。 - Tahmid Rahman
2个回答

12

onCreate方法中使用Handler对象。它的postDelayed方法将导致Runnable参数被添加到消息队列,并在指定时间之后运行(在给定示例中为0)。然后它将在固定的时间间隔(在此示例中为1000毫秒)后排队。

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    android.os.Handler customHandler = new android.os.Handler();
    customHandler.postDelayed(updateTimerThread, 0);
}

private Runnable updateTimerThread = new Runnable()
{
    public void run()
    {
        //write here whaterver you want to repeat
        customHandler.postDelayed(this, 1000);
    }
};

@MarkBuikema 漏洞在哪里?你能具体说明一下吗? - Jason Harrison
内存泄漏可能不是正确的术语,但当应用程序暂停时,这将继续发生(我认为这不是您想要的)。 - Mark Buikema

3
我使用了这里的解决方案。但在初始化处理程序的代码中,我使用了:
mHandler = new Handler(getMainLooper);

代替
mHandler = new Handler();

这对我很有效


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