diff --git a/shared/src/main/java/com/optimizely/ab/android/shared/ServiceScheduler.java b/shared/src/main/java/com/optimizely/ab/android/shared/ServiceScheduler.java index 973a81d87..1429c5980 100644 --- a/shared/src/main/java/com/optimizely/ab/android/shared/ServiceScheduler.java +++ b/shared/src/main/java/com/optimizely/ab/android/shared/ServiceScheduler.java @@ -31,6 +31,7 @@ import android.support.annotation.RequiresApi; import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import static android.app.job.JobScheduler.RESULT_SUCCESS; @@ -131,10 +132,14 @@ private void setRepeating(long interval, PendingIntent pendingIntent, Intent int builder.setExtras(persistableBundle); - if (jobScheduler.schedule(builder.build()) != RESULT_SUCCESS) { - logger.error("ServiceScheduler", "Some error while scheduling the job"); + try { + if (jobScheduler.schedule(builder.build()) != RESULT_SUCCESS) { + logger.error("ServiceScheduler", "Some error while scheduling the job"); + } + } + catch (Exception e) { + logger.error(String.format("Problem scheduling job %s", intent.getComponent().toShortString()), e); } - } else { AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); @@ -155,11 +160,7 @@ private void cancelRepeating(PendingIntent pendingIntent, Intent intent) { if (ServiceScheduler.isScheduled(context, id)) { jobScheduler.cancel(id); } - } catch (IllegalAccessException e) { - logger.error("Error in Cancel ", e); - } catch (NoSuchFieldException e) { - logger.error("Error in Cancel ", e); - } catch (ClassNotFoundException e) { + } catch (Exception e) { logger.error("Error in Cancel ", e); } } @@ -171,16 +172,14 @@ private void cancelRepeating(PendingIntent pendingIntent, Intent intent) { } private int getJobId(Intent intent) { - String clazz = intent.getComponent().getClassName(); + String clazz = "unknown"; Integer id = null; + try { + clazz = intent.getComponent().getClassName(); id = (Integer) Class.forName(clazz).getDeclaredField("JOB_ID").get(null); - } catch (IllegalAccessException e) { + } catch (Exception e) { logger.error("Error getting JOB_ID from " + clazz, e); - } catch (NoSuchFieldException e) { - logger.error("Error getting JOB_ID from " + clazz, e); - } catch (ClassNotFoundException e) { - logger.error("Error getting JOB_ID from " + clazz, e); } return id == null ? -1 : id; @@ -197,7 +196,7 @@ public void unschedule(Intent intent) { try { PendingIntent pendingIntent = pendingIntentFactory.getPendingIntent(intent); cancelRepeating(pendingIntent, intent); - logger.info("Unscheduled {}", intent.getComponent().toShortString()); + logger.info("Unscheduled {}", intent.getComponent()!=null ? intent.getComponent().toShortString() : "intent"); } catch (Exception e) { logger.debug("Failed to unschedule service", e); } @@ -274,7 +273,13 @@ public static void startService(Context context, Integer jobId, Intent intent) { .build(); JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); - jobScheduler.enqueue(jobInfo, new JobWorkItem(intent)); + JobWorkItem jobWorkItem = new JobWorkItem(intent); + try { + jobScheduler.enqueue(jobInfo, jobWorkItem); + } + catch (Exception e) { + LoggerFactory.getLogger("ServiceScheduler").error("Problem enqueuing work item ", e); + } } else {