我的要求是
Android应用程序必须每隔一小时(可配置)向服务器发送用户位置详细信息(纬度和经度)。
我遵循的方法是使用警报管理器,我按照配置的时间间隔调用我的服务,无论应用程序是否正在运行,都会将位置详细信息发送到服务器。
这是一个好方法吗?
答案 0 :(得分:2)
我更喜欢ScheduledExecutorService,因为后台任务更容易。
<强> AlarmManager:强>
The Alarm Manager holds a CPU wake lock as long as the alarm receiver's onReceive() method is executing. This guarantees that the phone will not sleep until you have finished handling the broadcast. Once onReceive() returns, the Alarm Manager releases this wake lock.
<强>的ScheduledThreadPoolExecutor:强>
You can use java.util.Timer or ScheduledThreadPoolExecutor (preferred) to schedule an action to occur at regular intervals on a background thread.
你可以在这里看到完整答案=&gt; Which is Better ScheduledExecutorService or AlarmManager in android?和Here
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// Hit WebService
}
}, 0, 1, TimeUnit.HOURS);
答案 1 :(得分:0)
是的,使用AlarmManager是一种很好的方法
警报管理器适用于您希望在特定时间运行应用程序代码的情况,即使您的应用程序当前未运行也是如此。对于正常的计时操作(刻度,超时等),使用Handler会更容易,也更有效。
请参阅此https://developer.android.com/training/scheduling/alarms.html
答案 2 :(得分:0)
Android服务在UI线程上运行,因此您不应该在其中执行长时间运行的任务,例如将数据发送到服务器。您可以使用的方法是ScheduledThreadPoolExecutor或AlarmManager,用于调度和使用asynctask或任何其他后台线程将数据发送到服务器
答案 3 :(得分:0)
我更喜欢Timer
重复任务。
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
process();
}
};
Timer mTimer = new Timer();
mTimer.schedule(timerTask, 0,60*60*60*1000);