在android中每2小时调用一次方法的最佳方法?

时间:2014-05-15 08:06:08

标签: java android multithreading time delay

我看到了这种方法:

TimerTask timerTask = new TimerTask() {
    @Override
    public void run() {
        MyMethod();
    }
};

Timer timer = new Timer(true);
timer.schedule(timerTask, 0, 7200000); 

1。这是最好的方法吗?

2。我怎样才能确保这种方法不会“死”?

注意:如果应用程序已关闭,我不需要此方法在后台工作,因此无需进行服务或类似的事情。

2 个答案:

答案 0 :(得分:2)

我认为如果使用AlarmManager,可以改进此方法。您可以每2小时设置一次定期闹钟,然后让BroadCast接收器接收闹钟,在这里您可以完成任务。只要设备未重新启动,这就不会死亡。如果它确实重新启动,那么您需要检测设备启动并重新设置定期警报。

话虽如此,如果您的轮询持续时间高达2小时,上述方法似乎比TimerTask更可靠。 2小时后你的应用程序甚至可能都没有运行,那么操作系统可能会在那时杀死它,所以这段代码将无法工作这么长时间。我认为TimerTask方法更适合以秒为单位的轮询持续时间。在您的情况下,您最好使用AlarmManager和RecurringAlarm。

答案 1 :(得分:2)

这是我正在寻找的答案,一旦应用程序未运行,这将按我的意愿停止。

final Handler handler = new Handler();
    Runnable runnable = new Runnable() {
           @Override
           public void run() {
              L.e("Called");
              handler.postDelayed(this, 7200000);
           }
        };
        handler.postDelayed(runnable, 7200000);