2016-05-25 61 views
7

Tôi không thể lấy JobScheduler để bắt đầu công việc đã lên lịch khi chạy trên trình giả lập Android. Nếu tôi thử nghiệm trên thực Samsung Galaxy S7 và Nexus 5X, cả hai chạy Android 6.0.1, công việc dự kiến ​​bắt đầu ngay lập tức. Trình giả lập được cấu hình để có 100% pin và sạc và tốc độ mạng đầy đủ được kích hoạt.Android JobScheduler không bắt đầu trên trình giả lập

Tôi đang chạy Android Studio 2.1.1, jre 1.8.0_92-b14 trên OSX El capitan 10.11.4. Phiên bản trình mô phỏng là 25.1.6 và đang chạy Android 6.0.

Đây là cách tôi sắp xếp công việc của tôi:

public static void sendInspectionSessions(Context context) { 
    JobScheduler js = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); 
    JobInfo job = new JobInfo.Builder(
      INSPECTION_SESSION_JOB_ID, 
      new ComponentName(context, InspectionSessionJobService.class)) 
      .setBackoffCriteria(TimeUnit.SECONDS.toMillis(30), JobInfo.BACKOFF_POLICY_EXPONENTIAL) 
      .setPersisted(true) 
      .setMinimumLatency(0) 
      .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) 
      .setOverrideDeadline(Config.INSPECTION_SESSION_SEND_DEADLINE) 
      .build(); 
    int id = js.schedule(job); 
    if (id > 0) { 
     LogUtil.i(TAG, "Scheduled InspectionSession send job with id " + id + ". Supplied id was " + INSPECTION_SESSION_JOB_ID); 
    } else { 
     LogUtil.e(TAG, "Failed to schedule InspectionSession send job. Return code was " + id); 
    } 
} 

lịch() lợi nhuận 1 trên cả hai bộ mô phỏng và thiết bị. Không có thông báo lỗi nào được hiển thị trên trình mô phỏng.

tôi đã xác định dịch vụ việc làm của tôi trong AndroidManifest theo cách sau:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<service android:name=".service.InspectionSessionJobService" 
     android:permission="android.permission.BIND_JOB_SERVICE" 
     android:exported="true" /> 

Tôi có bị mất một cái gì đó hoặc đây là một lỗi với Android Emulator? Có ai có JobScheduler để làm việc trên giả lập?

+0

Tôi thậm chí sẽ bắt đầu quá trình qua ADB. Rất nhiều ví dụ tham khảo GCMNetworkManager nhưng không phải là JobScheduler nếu bạn không quan tâm đến trước 5.0 –

+0

Trong trường hợp của tôi, lúc đầu có vẻ như vấn đề tương tự như dịch vụ dường như không chạy. Nhưng sau đó đôi khi tôi thấy rằng có một sự chậm trễ trước khi dịch vụ được gọi. Nếu chúng ta đặt độ trễ tối thiểu và ghi đè thời hạn cho 0 dịch vụ sẽ được thực hiện gần như ngay lập tức. – vsatkh

Trả lời

0

Có lẽ đã quá muộn, nhưng bạn gọi sendInspectionSessions() ở đâu? Bạn phải chuyển ngữ cảnh ứng dụng cho nó.

Đối với những người khác: bạn có thể khởi tạo nó trong phương thức onCreate() của ứng dụng

Các vấn đề liên quan