我有一个Android应用。该应用每15秒将位置信息发送到服务器。我有后台服务和计时器。我保存到文件应用程序日志。查看日志时,我发现计时器有时无法正常工作。该问题仅在应用程序进入后台时发生。什么是android最佳实践后台任务?
Timer timer = new Timer();
timer.schedule(new mainTask(), 0, 15000);
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_NOT_STICKY;
}
线程调用时间戳日志。
//for example, thread didn't work 2 minutes.
17:19:35.627
17:21:31.201
thread didn't work 4 minutes.
17:25:23.573
thread didn't work 4 minutes.
17:29:35.345
答案 0 :(得分:0)
较新版本的Android放background execution limit,在尝试在后台运行任务时可能会遇到此类问题。
在这种情况下,您可以考虑使用JobScheduler
,这可能会对您有所帮助。 Here是一个很好的实施教程。
答案 1 :(得分:0)
请尝试使用Handler
代替Timer
。
private Handler handlerUpdateLocation;
也可以在onStartCommand()
方法内启动句柄。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (handlerUpdateLocation == null) {
handlerUpdateLocation = new Handler();
handlerUpdateLocation.post(runnableUpdateLocation);
}
return START_STICKY;
}
使用此可运行程序每15秒执行一次代码。
private Runnable runnableUpdateLocation = new Runnable() {
@Override
public void run() {
// TODO: You can send location here
handlerUpdateLocation.postDelayed(this, 15000);
}
};