gpt4 book ai didi

android - 从 GCM 迁移到 FCM 后的 PeriodicTask 和 OneoffTask

转载 作者:搜寻专家 更新时间:2023-11-01 08:22:13 25 4
gpt4 key购买 nike

问题

从 GCM 迁移到 FCM 时,我应该使用什么来代替 PeriodicTask 和 OneOffTask? FCM 包中是否有任何等效项?

背景

最近 Google 弃用了 GCM,他们提供了 migration guide ,但我在那里找不到任何关于迁移 PeriodicTasks 和 OneOffTasks 的信息。

教程说 replace play-services-gcmfirebase-messaging 但我找不到与此 package 中的任务类似的内容, 所以我想知道他们是否完全放弃了他们,或者实际上我们是否可以继续使用 PeriodicTask/OneOffTasks?

最佳答案

PeriodicTask 和 OneoffTask 类(GcmNetworkManager 组件的一部分)可以替换为 Firebase Job Dispatcher ,这是一个开源库,用于安排将在您的应用进程中执行的工作单元。它公开的服务端 API 反射(reflect)了框架的 JobScheduler API,这与 GcmNetworkManager 略有不同。升级应该是一个相当简单的机械更改。

升级步骤

将以下内容添加到您的 build.gradle 的依赖项部分:

implementation 'com.firebase:firebase-jobdispatcher:0.8.5'

让您的GcmTaskService 实现扩展JobService。从此:

public class MyTaskService extends GcmTaskService {
@Override
public int onRunTask(TaskParams params) {
// Runs in its own thread
// ...
return RESULT_SUCCESS;
}
}

对此:

public class MyJobService extends JobService {
@Override
public boolean onStartJob(JobParameters job) {
// Runs on the main thread!
// ...
return false; // "Did we start any background work?"
}

@Override
public boolean onStopJob(JobParameters job) {
// Runs on the main thread!
// ...
return false; // "Should this job be retried?"
}
}

如果你不想自己管理线程,你可以利用库自带的SimpleJobService:

public class MyJobService extends SimpleJobService {
@Override
public int onRunJob(JobParameters job) {
// Runs on its own thread!
// ...
return JobService.RESULT_SUCCESS;
}
}

确保调整 list 。将您之前的 GcmTaskService 条目替换为如下内容:

<service
android:exported="false"
android:name=".MyJobService">
<intent-filter>
<action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE"/>
</intent-filter>
</service>

调度很简单:

// Create a new dispatcher using the Google Play driver.
FirebaseJobDispatcher dispatcher =
new FirebaseJobDispatcher(new GooglePlayDriver(context));

Job myJob = dispatcher.newJobBuilder()
// the JobService that will be called
.setService(MyJobService.class)
// uniquely identifies the job
.setTag("my-unique-tag")
// one-off job (only runs once unless a retry is requested)
.setRecurring(false)
// don't persist past a device reboot (requires RECEIVE_BOOT_COMPLETE)
.setLifetime(Lifetime.UNTIL_NEXT_BOOT)
// start between 0 and 60 seconds from now
.setTrigger(Trigger.executionWindow(0, 60))
// don't overwrite an existing job with the same tag
.setReplaceCurrent(false)
// retry with exponential backoff
.setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
// constraints that need to be satisfied for the job to run
.setConstraints(
// only run on an unmetered network
Constraint.ON_UNMETERED_NETWORK,
// only run when the device is charging
Constraint.DEVICE_CHARGING
)
.setExtras(myExtrasBundle)
.build();

dispatcher.mustSchedule(myJob);

检查 repo获取更多信息。

关于android - 从 GCM 迁移到 FCM 后的 PeriodicTask 和 OneoffTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49797085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com