我已经在我的Android应用程序中实现了Evernote android作业
implementation 'com.evernote:android-job:1.2.6'我定义为signleton来获取实例,我在我的Application类中通过
JobManager.create(this).addJobCreator(new CreatingJob());我有两个类,它们是作业创建类
public class CreatingJob implements JobCreator {
@Nullable
@Override
public Job create(@NonNull String tag) {
switch (tag) {
case SyncMasterDataJOB.TAG:
return new SyncMasterDataJOB();
}
return null;
}
}作业类
public class SyncMasterDataJOB extends Job {
public static final String TAG = "job_note_sync";
@NonNull
@Override
protected Result onRunJob(@NonNull Params params) {
//Doing my Task HERE
MyLog.ShowELog("JOB STARTED", "Job Has been Started");
MyToast.Lmsg(getContext(), "Job Has been Started");
return Result.SUCCESS;
}
public static void scheduleJob() {
Set<JobRequest> jobRequests = JobManager.instance().getAllJobRequestsForTag(SyncMasterDataJOB.TAG);
if (!jobRequests.isEmpty()) {
return;
}
new JobRequest.Builder(SyncMasterDataJOB.TAG)
.setPeriodic(MIN_INTERVAL, MIN_FLEX)
.build()
.schedule();
}
}但是问题是我的onRunJob()方法从来没有被调用过。我是刚接触Android工作的人。有人能告诉我我哪里做错了吗?
我正在参考这里的资料
发布于 2018-12-07 09:00:27
作业创建者类->
public class CreateJob implements JobCreator {
private Context context;
public CreateJob(Context context){
this.context = context;
}
// Here we have to register each of the jobs...
@Nullable
@Override
public Job create(@NonNull String tag) {
switch (tag) {
case CurrentWeatherUpdateJob.TAG:
return new CurrentWeatherUpdateJob();
default:
return null;
}
}
}这就是我注册JobCreator的地方。
// To use StartingPoint Anywhere in our app
// else you have to Instantiate StartingPoint inside every Activities on create...
public class StartingPoint extends Application {
@Override
public void onCreate() {
super.onCreate();
// Create Job is a class that registers all the Jobs...
JobManager.create(this).addJobCreator(new CreateJob(getApplicationContext()));
}
}这是您的乔布斯子类->
public class CurrentWeatherUpdateJob extends Job {
public static final String TAG = "CurrentWeatherUpdateJob";
// Update Weather Data every 15 Minutes...
private static final int CURRENTWEATHERUPDATE_TIMEINTERVAL = 15 * 60 * 1000;
// Interface that provides Data...
private ApiInterface service;
// For Celcius - metric / Kelvin - imperial
private String UnitType = "metric";
public CurrentWeatherUpdateJob() {
service = APIClient.getRetrofit_Weather().create(ApiInterface.class);
}
private static void ScheduleJobEvery15Minutes() {
// Scheduling Job After every 15 minutes...
new JobRequest.Builder(TAG)
.setPeriodic(CURRENTWEATHERUPDATE_TIMEINTERVAL)
.setRequiredNetworkType(JobRequest.NetworkType.CONNECTED)
.setRequirementsEnforced(true)
.setUpdateCurrent(true)
.build()
.schedule();
}
// implement your onRunJob method here
}从您想要的活动中调用ScheduleJobEvery15Minutes()方法。
发布于 2018-12-07 07:51:13
问题不在您的代码中,而是在职务期间的设置中。evernote只适用于周期性作业>=15 Min,而您使用1分钟作为运行作业的时间段。请参阅基于作业调度器的作业文档,因为作业调度程序对运行周期性作业具有相同的约束。
private void schedulePeriodicJob() {
int jobId = new JobRequest.Builder(DemoSyncJob.TAG)
.setPeriodic(TimeUnit.MINUTES.toMillis(15), TimeUnit.MINUTES.toMillis(5))
.build()
.schedule();
}这是他们在库文档中添加的代码。请看看这个。->
为什么周期作业的间隔不能小于15分钟?这个库是3个不同API的子集。由于Android,定期工作的最低间隔是15分钟。虽然pre设备支持较小的间隔,但对于这个库,选择了最不常见的任务,以便在所有设备上以相同的频率运行定期作业。
使用Android的JobScheduler允许设置较小的间隔,但是值会被静默地调整,并被记录为警告。这个库会抛出一个异常,这样错误的工作就会被提前捕获。你可以在这里读到更多关于它的内容。
这是为我工作的代码->
每15分钟更新一次天气数据.
private static final int CURRENTWEATHERUPDATE_TIMEINTERVAL = 15 * 60 * 1000;
private static void ScheduleJobEvery15Minutes() {
// Scheduling Job After every 15 minutes...
new JobRequest.Builder(TAG)
.setPeriodic(CURRENTWEATHERUPDATE_TIMEINTERVAL)
.setRequiredNetworkType(JobRequest.NetworkType.CONNECTED)
.setRequirementsEnforced(true)
.setUpdateCurrent(true)
.build()
.schedule();
}编辑->也检查Jobcreator类,您将返回空值如下,
public class CreatingJob implements JobCreator {
@Nullable
@Override
public Job create(@NonNull String tag) {
switch (tag) {
case SyncMasterDataJOB.TAG:
return new SyncMasterDataJOB();
}
return null;
}将代码更改为此->
public class CreatingJob implements JobCreator {
@Nullable
@Override
public Job create(@NonNull String tag) {
switch (tag) {
case SyncMasterDataJOB.TAG:
return new SyncMasterDataJOB();
case default:
return null;
}
}https://stackoverflow.com/questions/53664952
复制相似问题