spa*_*mel 5 java android alarmmanager google-cloud-firestore android-workmanager
我是新手,所以如果问题措辞不当,请告诉我!我有一个 Android 应用程序,即使手机处于锁定状态,它也需要大约每 15 分钟执行一次任务。上下文是: - 我的目标是 SDK 23 或更高版本 - 任务 1) 获取用户的位置 2) 使用 OKHttpClient 调用 HTTPS API,然后 3) 将结果发送到 Firestore 数据库
我正在使用 WorkManager 来尝试实现这一目标。但是,问题是每次执行时,都会执行 8-9 次,而且时间很不规律。我可以从 Firestore 条目和 Logcat 中看到这一点。
WorkManager 甚至是完成这项任务的正确方法吗?我在用
implementation "androidx.work:work-runtime:2.0.1"
import androidx.work.PeriodicWorkRequest;
import androidx.work.WorkManager;
import androidx.work.ExistingPeriodicWorkPolicy;
Run Code Online (Sandbox Code Playgroud)
我看到其他人有这个问题:Android Worker 多次执行该作业
//In MainActivity.java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(
PeriodicReadings.class, 15, TimeUnit.MINUTES).build();
WorkManager.getInstance().enqueueUniquePeriodicWork("PWR", ExistingPeriodicWorkPolicy.REPLACE, periodicWorkRequest);
//In PeriodicReadings.java:
@NonNull
@Override
public Result doWork() {
getReadings(); //work to be done
return Result.success();
}
Run Code Online (Sandbox Code Playgroud)
每 15 分钟,我预计 Firestore 数据库中会出现一个读数,但我看到 8 - 9 个读数的批次以不规则的间隔出现,每 15 分钟 - 2 小时变化一次。
我尝试过清理和重建,使缓存无效并重新启动,以及在手机上重新加载应用程序。
小智 1
试试这个:
WorkManager.getInstance().enqueueUniquePeriodicWork("PWR",ExistingPeriodicWorkPolicy.KEEP, periodicWorkRequest);
Run Code Online (Sandbox Code Playgroud)
KEEP:如果先前的工作人员存在,则您的新尝试将被忽略,否则您的新工作人员将被排队。
REPLACE:如果先前的工作程序存在,它将被取消,导致其状态为 CANCELLED。否则,你的新工人就会排队。
| 归档时间: |
|
| 查看次数: |
733 次 |
| 最近记录: |