Firebase 作业服务启动延迟很大
Firebase job service started with big delay
我正在测试接收 Firebase 云数据消息并在 Firebase 作业服务中处理它们的应用程序。在 FirebaseMessagingService 中接收消息会立即发生并且没有问题,但 Firebase 作业服务有时会延迟很长时间(5-10 分钟)启动,有时甚至根本不会启动。 dispatcher.schedule (myJob) 方法总是给出结果 SCHEDULE_RESULT_SUCCESS。这是作业调度功能:
// For long-running tasks (10 seconds or more) use Firebase Job Dispatcher.
Bundle bundle = new Bundle();
bundle.putInt(WatchDogService.REQUEST_ID, request.ordinal());
bundle.putString(REQUEST_PARAM, parameter);
FirebaseJobDispatcher dispatcher =
new FirebaseJobDispatcher(new GooglePlayDriver(this));
Job myJob = dispatcher.newJobBuilder()
.setService(LongJobService.class)
.setTag("ua.ers.LongJobService")
.setTrigger(Trigger.NOW)
.setReplaceCurrent(true)
.setExtras(bundle)
.build();
int result = dispatcher.schedule(myJob);
Log.d(TAG, "Schedule result: " + result);
这是一个 Firebase 作业服务 class:
public class LongJobService extends JobService {
private static final String TAG = "LongJobService";
@Override
public boolean onStartJob(final JobParameters jobParameters) {
Log.d(TAG, "LongJobService started");
return true;
}
@Override
public boolean onStopJob(JobParameters jobParameters) {
Log.d(TAG, "LongJobService stopped");
return false;
}
}
请告诉我,问题的原因可能是什么?
根据文档,这只是通常的行为
The scheduler backend is encouraged to use the windowEnd value as a signal that the job should be run, but this is not an enforced behavior.
但为了更好的执行尝试
Trigger.executionWindow(0, 0)
而不是
Trigger.NOW
所以它看起来像
Job myJob = dispatcher.newJobBuilder()
.setService(Service.class)
.setRecurring(true) // if task is periodic, else pass "false"
.setTrigger(Trigger.executionWindow(0, 0))
.setTag("tag")
.build();
我正在测试接收 Firebase 云数据消息并在 Firebase 作业服务中处理它们的应用程序。在 FirebaseMessagingService 中接收消息会立即发生并且没有问题,但 Firebase 作业服务有时会延迟很长时间(5-10 分钟)启动,有时甚至根本不会启动。 dispatcher.schedule (myJob) 方法总是给出结果 SCHEDULE_RESULT_SUCCESS。这是作业调度功能:
// For long-running tasks (10 seconds or more) use Firebase Job Dispatcher.
Bundle bundle = new Bundle();
bundle.putInt(WatchDogService.REQUEST_ID, request.ordinal());
bundle.putString(REQUEST_PARAM, parameter);
FirebaseJobDispatcher dispatcher =
new FirebaseJobDispatcher(new GooglePlayDriver(this));
Job myJob = dispatcher.newJobBuilder()
.setService(LongJobService.class)
.setTag("ua.ers.LongJobService")
.setTrigger(Trigger.NOW)
.setReplaceCurrent(true)
.setExtras(bundle)
.build();
int result = dispatcher.schedule(myJob);
Log.d(TAG, "Schedule result: " + result);
这是一个 Firebase 作业服务 class:
public class LongJobService extends JobService {
private static final String TAG = "LongJobService";
@Override
public boolean onStartJob(final JobParameters jobParameters) {
Log.d(TAG, "LongJobService started");
return true;
}
@Override
public boolean onStopJob(JobParameters jobParameters) {
Log.d(TAG, "LongJobService stopped");
return false;
}
}
请告诉我,问题的原因可能是什么?
根据文档,这只是通常的行为
The scheduler backend is encouraged to use the windowEnd value as a signal that the job should be run, but this is not an enforced behavior.
但为了更好的执行尝试
Trigger.executionWindow(0, 0)
而不是
Trigger.NOW
所以它看起来像
Job myJob = dispatcher.newJobBuilder()
.setService(Service.class)
.setRecurring(true) // if task is periodic, else pass "false"
.setTrigger(Trigger.executionWindow(0, 0))
.setTag("tag")
.build();