android - 即使应用程序处于前台或已终止状态,也每 15 分钟检查一次位置
问题描述
我有一个要求,我的 android 应用程序需要每 15 分钟检查一次位置并将其更新到 SQLite DB。即使应用程序从后台删除,这个过程也应该发生。我尝试了以下所有方法,但是当应用程序长时间运行时,它们都不起作用。
- 带有前台服务的可运行函数。下面是示例
mHandlerTask = new Runnable() {
@Override
public void run() {
doCheckLocation();
mHandler.postDelayed(mHandlerTask, 60000 * 15);
}
};
mHandler.postDelayed(mHandlerTask, 60000 * 15);
这工作正常,但如果屏幕关闭,则该可运行对象不会触发。我认为这是因为打盹模式。
具有定期工作请求的工作管理器:当设备进入打盹模式/屏幕关闭时,这也不会触发。
警报管理器:这有几个功能
setExactAndAllowWhileIdle()
,setAlarmClock()
用于在准确的时间触发。但是电池消耗非常高,如果我使用的话手机会变热setAlarmClock()
。
所以我想试试唤醒锁。当屏幕关闭时,我获取它。我会在屏幕打开时释放它。但是唤醒锁会耗尽电池电量,而且操作系统很可能会杀死我的应用程序。
谁能提出更好的方法来解决这个问题?
解决方案
WorkManager
并且AlarmManager
实际上是在您的应用程序中安排某些任务的最有效方法,但是您的要求不是电池效率高,而且永远不会......位置跟踪和每 15 分钟“唤醒”设备都会导致高电池消耗,我怀疑你可以防止这种情况
推荐阅读
- drupal - 如何通过 URL 或菜单路径查询 Drupal 快捷方式 (8.x/9.x)?
- javascript - How come YouTube can autoplay videos without user interaction but no other site can?
- c++ - 在 MacOS 上构建项目时,Cmake '无法在生成多个输出文件时指定 -o'
- android - 必需的 java.lang.String 在 Big Sur 上的 Android Studio 北极狐上找到了字符串
- angular - TypeScript 编译中缺少 main.tns.ts。从 Angular 迁移到 Nativescript
- machine-code - 您如何在 gforth 中编译和执行机器代码?
- python - 使用 Python Enum 或 Dictionary 映射常量并保持 DRY 推理的最佳方式
- python - Google Kickstart Truck Delivery 部分正确答案
- c - Win32 API - 使用 TextOut 在工具栏的空白区域上绘图
- vue.js - VUE.JS 中的 WebGL Earth 或 globe.gl