Приложения не могут планировать более 100 различных заданий с JobIntentService - PullRequest
0 голосов
/ 26 марта 2019

Вот мой JobIntentService

public class NotifierService extends JobIntentService {
     public static void enqueueWork(Context context, Intent work) {
         enqueueWork(context, NotifierService.class, JOB_ID, work);
     }

     protected void onHandleWork(Intent intent) {
         //simple if/else check
     }
}

Тем не менее, я получил много сбоев от сбоев, которые жаловались на 100 distinct jobs:

Caused by java.lang.IllegalStateException: Apps may not schedule more than 100 distinct jobs
   at android.os.Parcel.readException(Parcel.java:1951)
   at android.os.Parcel.readException(Parcel.java:1889)
   at android.app.job.IJobScheduler$Stub$Proxy.enqueue(IJobScheduler.java:211)

Есть ли причина для ее решения?

Я пытался отменить его, прежде чем ставить новый в очередь, как показано ниже:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            JobScheduler scheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
            if (scheduler != null) {
                for (JobInfo jobInfo : scheduler.getAllPendingJobs()) {
                    if (jobInfo.getId() == JOB_ID) {
                        scheduler.cancel(JOB_ID);
                    }
                }
            }
        }

Однако у меня возникла другая проблема:

Caused by java.lang.IllegalArgumentException: Given work is not active: JobWorkItem{id=1 intent=Intent { cmp=com.my.test.package/.notifier.NotifierService } dcount=1}
   at android.app.job.JobParameters.completeWork(JobParameters.java:221)

Ребята, у вас есть предложения?

P / s: я не мог воспроизвести это на своих устройствах, но я получил это тысячу раз в инструменте CrashReport. Отмена работы до постановки в очередь новой работы действительно решила проблему 100 различных работ, но она вызвала еще одну ошибку, как указано выше.

...