在Android上定期安排后台任务

lam*_*ard 5 android android-alarms android-background android-workmanager

我正在开发一个应用程序,我必须从多个传感器读取数据并每 15 分钟将其发送到远程服务器。这也必须在应用程序关闭/终止时完成,并且我还必须确保它始终执行。我还想确保它(几乎)恰好每 15 分钟发生一次(+-1 分钟差异是上限)。

此时,我找到了 3 个选项:使用 Workmanager、Alarmmanager 或使用前台服务。按照文档,Workmanager 似乎是执行后台任务的方法,但是,在阅读了一些内容之后,Alarmmanager 似乎是一个更安全的选择(Workmanager 有时在打瞌睡模式方面存在问题,并且时间不准确,因为它使用了 Flex持续时间至少 5 分钟)。前台服务实际上不允许执行此类任务(它并不是真正长时间运行,它只是一个周期性任务),并且在较新的 Android 版本中受到限制。您认为使用 Alarmmanger 来完成此任务是个好主意,还是应该使用其他东西?谢谢!

小智 3

TODO后台调度..您可以使用此方法来做您的事情..

科特林;

val service = Executors.newSingleThreadScheduledExecutor()
        val handler = Handler(Looper.getMainLooper())
        service.scheduleAtFixedRate({
            handler.run {
                // Do your stuff here, It gets loop every 15 Minutes
            }
        }, 0, 15, TimeUnit.MINUTES);
Run Code Online (Sandbox Code Playgroud)

爪哇;

  ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
        Handler handler = new Handler(Looper.getMainLooper());

        service.scheduleAtFixedRate(() -> {
            handler.post(() -> {
                // Do your stuff here, It gets loop every 15 Minutes
            });
        }, 0, 15, TimeUnit.MINUTES);
Run Code Online (Sandbox Code Playgroud)