首页 > 解决方案 > 即使应用程序处于前台或已终止状态,也每 15 分钟检查一次位置

问题描述

我有一个要求,我的 android 应用程序需要每 15 分钟检查一次位置并将其更新到 SQLite DB。即使应用程序从后台删除,这个过程也应该发生。我尝试了以下所有方法,但是当应用程序长时间运行时,它们都不起作用。

  1. 带有前台服务的可运行函数。下面是示例
mHandlerTask = new Runnable() {
            @Override
            public void run() {
                doCheckLocation();
                mHandler.postDelayed(mHandlerTask, 60000 * 15);
            }
        };
        mHandler.postDelayed(mHandlerTask, 60000 * 15);

这工作正常,但如果屏幕关闭,则该可运行对象不会触发。我认为这是因为打盹模式。

  1. 具有定期工作请求的工作管理器:当设备进入打盹模式/屏幕关闭时,这也不会触发。

  2. 警报管理器:这有几个功能setExactAndAllowWhileIdle()setAlarmClock()用于在准确的时间触发。但是电池消耗非常高,如果我使用的话手机会变热setAlarmClock()

所以我想试试唤醒锁。当屏幕关闭时,我获取它。我会在屏幕打开时释放它。但是唤醒锁会耗尽电池电量,而且操作系统很可能会杀死我的应用程序。

谁能提出更好的方法来解决这个问题?

标签: androidalarmmanagerandroid-workmanagerbackground-serviceforeground-service

解决方案


WorkManager并且AlarmManager实际上是在您的应用程序中安排某些任务的最有效方法,但是您的要求不是电池效率高,而且永远不会......位置跟踪和每 15 分钟“唤醒”设备都会导致高电池消耗,我怀疑你可以防止这种情况


推荐阅读