【问题标题】:Best practice for background task execute at fixed interval of 10 minutes后台任务的最佳实践以 10 分钟的固定间隔执行
【发布时间】:2019-09-18 12:37:20
【问题描述】:

我有一个用于管理员工的应用程序,需要在工作时间以 10 分钟的固定间隔跟踪他们的位置 这个工作经理、服务或工作调度程序的最佳解决方案是什么 我已经尝试过服务,但是当应用程序被强制关闭时,它不会运行并丢失员工位置

【问题讨论】:

  • 使用现代 Android 版本,您需要使用 ForegroundService 并且用户需要为您的应用关闭省电优化,以便在后台和屏幕关闭等情况下可靠地跟踪设备位置。GPS 获胜不能在室内工作,基于网络的位置将非常不准确。
  • 应该是到客户家里或工作的地方拜访客户,我不需要很准确,但我会尝试前台服务

标签: android service android-service android-workmanager android-jobscheduler


【解决方案1】:

用于定期跟踪位置,

大约 X 分钟 - 推荐方式

  1. 使用Fused Location provider 并适当设置时间。它经常为您提供位置更新回调,并且是 Android 推荐的获取位置的方式。使用this

  2. 设置间隔
  3. 确保您拥有位置权限。如果您没有权限,则调用位置权限对话框

精确到 X 分钟

  1. 使用粘性前台服务连续跟踪位置,而不会杀死您的应用程序。检查样品here

参见下面的示例

对于融合位置提供者

@Override
protected void onResume() {
    super.onResume();
    if (requestingLocationUpdates) {
        startLocationUpdates();
    }
}

private void startLocationUpdates() {
    fusedLocationClient.requestLocationUpdates(createLocationRequest,
            locationCallback,
            Looper.getMainLooper());
}

如下创建您的位置请求参数:

protected static LocationRequest createLocationRequest() {

            LocationRequest mLocationRequest = LocationRequest.create();
            mLocationRequest.setInterval(LOCATION_UPDATE_TIME_INTERVAL_MINS * 60 * 1000);
            mLocationRequest.setFastestInterval(LOCATION_UPDATE_FATEST_TIME_INTERVAL_MINS * 60 * 1000);
            mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
            return mLocationRequest;
        }

查看详细文档以接收定期位置更新here

从 Commonsware answer 发帖: 当在后台定期做一些事情时——JobScheduler、WorkManager、AlarmManager、FCM 推送消息等——你必须考虑到你的进程可能不在你工作的时候。 Android 会为你创建一个进程,但它是“从头开始”的。您的 UI 可能已在内存中设置的任何内容(例如数据库)都将用于某个先前的进程,并且可能不会在新进程中设置。

【讨论】:

猜你喜欢
  • 2011-06-19
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 2014-01-18
相关资源
最近更新 更多