TimerTask timerTask = new TimerTask() {
@Override
public void run() {
MyMethod();
}
};
Timer timer = new Timer(true);
timer.schedule(timerTask, 0, 7200000);
1。这是最好的方法吗?
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);