Android后台服务计时器无法正常运行

时间:2019-05-01 20:17:04

标签: java android multithreading service

我有一个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

2 个答案:

答案 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);
    }
};