定期呼叫Android服务[GoodApporach?]
我的要求是 Android应用程序必须每一小时(可配置)向服务器发送用户位置详细信息(纬度和经度) 我采用的方法是使用alarm manager,我将按配置的时间间隔调用我的服务,该服务将向服务器发送位置详细信息,而不管应用程序是否正在运行定期呼叫Android服务[GoodApporach?],android,Android,我的要求是 Android应用程序必须每一小时(可配置)向服务器发送用户位置详细信息(纬度和经度) 我采用的方法是使用alarm manager,我将按配置的时间间隔调用我的服务,该服务将向服务器发送位置详细信息,而不管应用程序是否正在运行 这是一个好方法吗?是的,使用AlarmManager是一个好方法 Alarm Manager适用于希望在特定时间运行应用程序代码的情况,即使应用程序当前未运行。对于正常的计时操作(滴答声、超时等),使用处理程序更容易、更高效 请参考此在UI线程上运行的And
这是一个好方法吗?是的,使用AlarmManager是一个好方法 Alarm Manager适用于希望在特定时间运行应用程序代码的情况,即使应用程序当前未运行。对于正常的计时操作(滴答声、超时等),使用处理程序更容易、更高效
请参考此在UI线程上运行的Android服务,这样您就不应该在其中执行长时间运行的任务,比如向服务器发送数据。您可以使用ScheduledThreadPoolExecutor或AlarmManager来调度和使用asynctask或任何其他后台线程将数据发送到服务器我更喜欢ScheduledExecutorService,因为它更容易用于后台任务 AlarmManager:
只要报警接收器的onReceive()方法正在执行,报警管理器就会保持CPU唤醒锁。这保证了在您处理完广播之前,手机不会休眠。onReceive()返回后,报警管理器将释放此唤醒锁。
ScheduledThreadPoolExecutor:
您可以使用java.util.Timer或ScheduledThreadPoolExecutor(首选)来计划在后台线程上定期执行的操作。
您可以在这里看到完整答案=>和
对于重复的任务,我更喜欢
定时器
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
process();
}
};
Timer mTimer = new Timer();
mTimer.schedule(timerTask, 0,60*60*60*1000);
我个人使用定时器,但在进一步研究之后,我将切换到ScheduledThreadPoolExecutor。是的,这是一个很好的方法。
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
process();
}
};
Timer mTimer = new Timer();
mTimer.schedule(timerTask, 0,60*60*60*1000);