android.app.job.JobInfo#getExtras ( )源码实例Demo

下面列出了android.app.job.JobInfo#getExtras ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

@Test
public void schedule_twoJobs() {
  store.recordNextCallTime(TRANSPORT_CONTEXT, 5);
  int jobId = scheduler.getJobId(TRANSPORT_CONTEXT);
  // Schedule first job
  scheduler.schedule(TRANSPORT_CONTEXT, 1);
  assertThat(jobScheduler.getAllPendingJobs()).isNotEmpty();
  assertThat(jobScheduler.getAllPendingJobs().size()).isEqualTo(1);
  // Schedule another job
  scheduler.schedule(TRANSPORT_CONTEXT, 2);
  assertThat(jobScheduler.getAllPendingJobs()).isNotEmpty();
  assertThat(jobScheduler.getAllPendingJobs().size()).isEqualTo(1);
  // The job should be the second job.
  JobInfo jobInfo = jobScheduler.getAllPendingJobs().get(0);
  PersistableBundle bundle = jobInfo.getExtras();
  assertThat(jobInfo.getId()).isEqualTo(jobId);
  assertThat(bundle.get(JobInfoScheduler.ATTEMPT_NUMBER)).isEqualTo(2);
  assertThat(bundle.get(JobInfoScheduler.BACKEND_NAME))
      .isEqualTo(TRANSPORT_CONTEXT.getBackendName());
}
 
@Test
public void schedule_whenExtrasEvailable_transmitsExtras() {
  String extras = "e1";
  TransportContext transportContext =
      TransportContext.builder()
          .setBackendName("backend1")
          .setExtras(extras.getBytes(Charset.defaultCharset()))
          .build();
  store.recordNextCallTime(transportContext, 1000000);
  scheduler.schedule(transportContext, 1);
  JobInfo jobInfo = jobScheduler.getAllPendingJobs().get(0);
  PersistableBundle bundle = jobInfo.getExtras();
  assertThat(bundle.get(JobInfoScheduler.EXTRAS))
      .isEqualTo(
          Base64.encodeToString(extras.getBytes(Charset.defaultCharset()), Base64.DEFAULT));
}
 
源代码3 项目: container   文件: VJobSchedulerService.java
@Override
public int schedule(JobInfo job) throws RemoteException {
    int vuid = VBinder.getCallingUid();
    int id = job.getId();
    ComponentName service = job.getService();
    JobId jobId = new JobId(vuid, service.getPackageName(), id);
    JobConfig config = mJobStore.get(jobId);
    if (config == null) {
        config = new JobConfig(mGlobalJobId++, service.getClassName(), job.getExtras());
        mJobStore.put(jobId, config);
    } else {
        config.serviceName = service.getClassName();
        config.extras = job.getExtras();
    }
    saveJobs();
    mirror.android.app.job.JobInfo.jobId.set(job, config.virtualJobId);
    mirror.android.app.job.JobInfo.service.set(job, mJobProxyComponent);
    return mScheduler.schedule(job);
}
 
@Test
public void schedule_longWaitTimeFirstAttempt() {
  store.recordNextCallTime(TRANSPORT_CONTEXT, 1000000);
  scheduler.schedule(TRANSPORT_CONTEXT, 1);
  int jobId = scheduler.getJobId(TRANSPORT_CONTEXT);
  assertThat(jobScheduler.getAllPendingJobs()).isNotEmpty();
  assertThat(jobScheduler.getAllPendingJobs().size()).isEqualTo(1);
  JobInfo jobInfo = jobScheduler.getAllPendingJobs().get(0);
  PersistableBundle bundle = jobInfo.getExtras();
  assertThat(jobInfo.getId()).isEqualTo(jobId);
  assertThat(bundle.get(JobInfoScheduler.BACKEND_NAME))
      .isEqualTo(TRANSPORT_CONTEXT.getBackendName());
  assertThat(bundle.get(JobInfoScheduler.ATTEMPT_NUMBER)).isEqualTo(1);
  assertThat(jobInfo.getMinLatencyMillis()).isEqualTo(999999);
}
 
@Test
public void schedule_noTimeRecordedForBackend() {
  scheduler.schedule(TRANSPORT_CONTEXT, 1);
  int jobId = scheduler.getJobId(TRANSPORT_CONTEXT);
  assertThat(jobScheduler.getAllPendingJobs()).isNotEmpty();
  assertThat(jobScheduler.getAllPendingJobs().size()).isEqualTo(1);
  JobInfo jobInfo = jobScheduler.getAllPendingJobs().get(0);
  PersistableBundle bundle = jobInfo.getExtras();
  assertThat(jobInfo.getId()).isEqualTo(jobId);
  assertThat(bundle.get(JobInfoScheduler.BACKEND_NAME))
      .isEqualTo(TRANSPORT_CONTEXT.getBackendName());
  assertThat(bundle.get(JobInfoScheduler.ATTEMPT_NUMBER)).isEqualTo(1);
  assertThat(jobInfo.getMinLatencyMillis()).isEqualTo(THIRTY_SECONDS); // 2^0*DELTA
}
 
@Test
public void schedule_smallWaitTImeFirstAttempt() {
  store.recordNextCallTime(TRANSPORT_CONTEXT, 5);
  scheduler.schedule(TRANSPORT_CONTEXT, 1);
  int jobId = scheduler.getJobId(TRANSPORT_CONTEXT);
  assertThat(jobScheduler.getAllPendingJobs()).isNotEmpty();
  assertThat(jobScheduler.getAllPendingJobs().size()).isEqualTo(1);
  JobInfo jobInfo = jobScheduler.getAllPendingJobs().get(0);
  PersistableBundle bundle = jobInfo.getExtras();
  assertThat(jobInfo.getId()).isEqualTo(jobId);
  assertThat(bundle.get(JobInfoScheduler.BACKEND_NAME))
      .isEqualTo(TRANSPORT_CONTEXT.getBackendName());
  assertThat(bundle.get(JobInfoScheduler.ATTEMPT_NUMBER)).isEqualTo(1);
  assertThat(jobInfo.getMinLatencyMillis()).isEqualTo(THIRTY_SECONDS); // 2^0*DELTA
}
 
@Test
public void schedule_longWaitTimeTenthAttempt() {
  store.recordNextCallTime(TRANSPORT_CONTEXT, 1000000);
  scheduler.schedule(TRANSPORT_CONTEXT, 10);
  int jobId = scheduler.getJobId(TRANSPORT_CONTEXT);
  assertThat(jobScheduler.getAllPendingJobs()).isNotEmpty();
  assertThat(jobScheduler.getAllPendingJobs().size()).isEqualTo(1);
  JobInfo jobInfo = jobScheduler.getAllPendingJobs().get(0);
  PersistableBundle bundle = jobInfo.getExtras();
  assertThat(jobInfo.getId()).isEqualTo(jobId);
  assertThat(bundle.get(JobInfoScheduler.BACKEND_NAME))
      .isEqualTo(TRANSPORT_CONTEXT.getBackendName());
  assertThat(bundle.get(JobInfoScheduler.ATTEMPT_NUMBER)).isEqualTo(10);
  assertThat(jobInfo.getMinLatencyMillis()).isGreaterThan((long) 1000000);
}
 
@Test
public void schedule_withMultipleContexts_whenExtrasAvailable_schedulesForBothContexts() {
  String extras1 = "e1";
  String extras2 = "e2";
  TransportContext ctx1 =
      TransportContext.builder()
          .setBackendName("backend1")
          .setExtras(extras1.getBytes(Charset.defaultCharset()))
          .build();
  TransportContext ctx2 =
      TransportContext.builder()
          .setBackendName("backend1")
          .setExtras(extras2.getBytes(Charset.defaultCharset()))
          .build();

  store.recordNextCallTime(ctx1, 1000000);
  store.recordNextCallTime(ctx2, 1000000);
  scheduler.schedule(ctx1, 1);
  scheduler.schedule(ctx2, 1);
  assertThat(jobScheduler.getAllPendingJobs()).hasSize(2);
  JobInfo jobInfo = jobScheduler.getAllPendingJobs().get(0);
  PersistableBundle bundle = jobInfo.getExtras();
  assertThat(bundle.get(JobInfoScheduler.EXTRAS))
      .isEqualTo(
          Base64.encodeToString(extras1.getBytes(Charset.defaultCharset()), Base64.DEFAULT));

  jobInfo = jobScheduler.getAllPendingJobs().get(1);
  bundle = jobInfo.getExtras();
  assertThat(bundle.get(JobInfoScheduler.EXTRAS))
      .isEqualTo(
          Base64.encodeToString(extras2.getBytes(Charset.defaultCharset()), Base64.DEFAULT));
}
 
@Test
public void schedule_smallWaitTImeFirstAttempt_multiplePriorities() {
  store.recordNextCallTime(TRANSPORT_CONTEXT, 5);
  scheduler.schedule(TRANSPORT_CONTEXT, 1);
  scheduler.schedule(UNMETERED_TRANSPORT_CONTEXT, 1);
  int jobId1 = scheduler.getJobId(TRANSPORT_CONTEXT);
  int jobId2 = scheduler.getJobId(UNMETERED_TRANSPORT_CONTEXT);

  assertThat(jobScheduler.getAllPendingJobs()).isNotEmpty();
  assertThat(jobScheduler.getAllPendingJobs().size()).isEqualTo(2);
  JobInfo jobInfo1 = jobScheduler.getAllPendingJobs().get(0);
  assertThat(jobInfo1.getId()).isEqualTo(jobId1);
  assertThat(jobInfo1.getMinLatencyMillis()).isEqualTo(THIRTY_SECONDS); // 2^0*DELTA

  PersistableBundle bundle1 = jobInfo1.getExtras();
  assertThat(bundle1.get(JobInfoScheduler.BACKEND_NAME))
      .isEqualTo(TRANSPORT_CONTEXT.getBackendName());
  assertThat(bundle1.get(JobInfoScheduler.EVENT_PRIORITY))
      .isEqualTo(PriorityMapping.toInt(Priority.DEFAULT));
  assertThat(bundle1.get(JobInfoScheduler.ATTEMPT_NUMBER)).isEqualTo(1);

  JobInfo jobInfo2 = jobScheduler.getAllPendingJobs().get(1);
  assertThat(jobInfo2.getId()).isEqualTo(jobId2);
  assertThat(jobInfo2.getMinLatencyMillis()).isEqualTo(TWENTY_FOUR_HOURS); // 2^0*DELTA

  PersistableBundle bundle2 = jobInfo2.getExtras();
  assertThat(bundle2.get(JobInfoScheduler.BACKEND_NAME))
      .isEqualTo(UNMETERED_TRANSPORT_CONTEXT.getBackendName());
  assertThat(bundle2.get(JobInfoScheduler.EVENT_PRIORITY))
      .isEqualTo(PriorityMapping.toInt(Priority.VERY_LOW));
  assertThat(bundle2.get(JobInfoScheduler.ATTEMPT_NUMBER)).isEqualTo(1);
}