Evernote Android_JOB метод onRunJob () никогда не вызывается - PullRequest
0 голосов
/ 07 декабря 2018

Я реализовал Evernote Android Job в своем приложении для Android через

implementation 'com.evernote:android-job:1.2.6'

И я определил как signleton, чтобы получить экземпляр, который я инициировал в своем классе приложения через

 JobManager.create(this).addJobCreator(new CreatingJob());

И у меня есть два класса: JOB CREATING CLASS

  public class CreatingJob implements JobCreator {
    @Nullable
    @Override
    public Job create(@NonNull String tag) {
        switch (tag) {
            case SyncMasterDataJOB.TAG:
                return new SyncMasterDataJOB();
        }
        return null;
    }
}

JOB CLASS

    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 JOBS.Может кто-нибудь сказать мне, где я делаю неправильно?

Я беру ссылку с здесь

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Класс создателя работы ->

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 () из своей деятельности, которую вы хотите.

0 голосов
/ 07 декабря 2018

Проблема не в вашем коде, а в настройке периода работы.evernote работает только с периодическим заданием> = 15 минут, в то время как вы используете 1 минуту в качестве периода для запуска задания.смотрите документацию Evenote-Job, так как она основана на Job-планировщике, который имеет те же ограничения для запуска периодического задания.

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 Nougat минимальный интервал периодических работ составляет 15 минут.Хотя устройства до Nougat поддерживают меньшие интервалы, для этой библиотеки в качестве минимума был выбран наименьший общий, чтобы периодические задания выполнялись с одинаковой частотой на всех устройствах.

JobScheduler с Android Nougat позволяет устанавливать меньший интервал, нозначение бесшумно корректируется и предупреждение регистрируется.Вместо этого эта библиотека генерирует исключение, так что некорректно выполняемые задания обнаруживаются рано.Вы можете прочитать больше об этом здесь.

это код, который работает для меня ->

где // Обновление данных о погоде каждые 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;
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...