JobSchedulerService Предупреждение о чрезмерном расходе заряда батареи - PullRequest
0 голосов
/ 01 октября 2018

MainActivity.class

Intent receiverIntent = new Intent(context, AlarmReceiver.class);
        sendBroadcast(receiverIntent);
        PendingIntent pendingIntentRepeating = PendingIntent.getBroadcast(context, 79, receiverIntent, PendingIntent.FLAG_CANCEL_CURRENT);
        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 24 * 60 * 1000, pendingIntentRepeating);

AlarmReceiver.class

public class AlarmReceiver extends BroadcastReceiver {

@SuppressLint("UnsafeProtectedBroadcastReceiver")
@Override
public void onReceive(final Context context, Intent intent) {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        JobScheduler scheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
        scheduler.cancel(208352939);

        ComponentName componentName = new ComponentName(context, JobSchedulerService.class);
        JobInfo info = new JobInfo.Builder(208352939, componentName)
                .setPersisted(true)
                .setOverrideDeadline(5000)
                .build();

        scheduler.schedule(info);
    }
}

}

JobSchedulerService.class

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public class JobSchedulerService extends JobService {

private boolean jobCancelled = false;

@SuppressLint("SimpleDateFormat")
@Override
public boolean onStartJob(JobParameters params) {
    Fabric.with(context, new Crashlytics());
    doBackgroundWork(params);
    return true;
}

private void doBackgroundWork(final JobParameters params) {
    new Thread(new Runnable() {
        @SuppressLint("SimpleDateFormat")
        @Override
        public void run() {

            for (int j = 0; j < trm; j++) {

                //my code

                if (jobCancelled) {
                    return;
                }
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            jobFinished(params, false);
        }
    }).start();
}

@Override
public boolean onStopJob(JobParameters params) {
    jobCancelled = true;
    return true;
  }
}

У меня есть триггеркаждые две секунды.Однако через несколько дней выдает предупреждение о большем расходе заряда батареи ... Или мне стоит попробовать другой метод?В чем причина этого.Я чувствовал необходимость получить помощь от вас.Заранее спасибо.

...