【问题标题】:Best way to call method every 2 hours in android?在android中每2小时调用一次方法的最佳方法?
【发布时间】:2014-07-03 13:32:37
【问题描述】:

我看到了这种方法:

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

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

1 .这是最好的方法吗?

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

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

【问题讨论】:

  • Android 中检查link 关于Timer
  • 你需要在run()方法中做UI的东西吗?
  • 不,我只是在改变 int 值。

标签: java android multithreading time delay


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我认为如果您改用 AlarmManager,则可以改进此方法。您可以设置每 2 小时重复一次的闹钟,然后有一个广播接收器来接收闹钟,在这里您可以做您的事情。只要设备没有重新启动,它就不会消失。如果它确实重新启动,那么您需要检测设备启动并重新设置您的重复警报。

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

    【讨论】:

    • 如果应用程序没有运行我不需要这个方法来运行,这就是我没有使用你的方法的原因。但投票支持好的解释
    猜你喜欢
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多