/** * Add <code>{@link DispatchTask}</code> to the queue if it's not already on the queue (this * way you can ensure only one instance of the task is scheduled at a time). After the task is * executed you can schedule it again. * * @return true if task was scheduled */ public boolean dispatchAsyncOnce(DispatchTask task) { return dispatchAsyncOnce(task, 0L); }
@Override public void onLogMessage(@NonNull ApptentiveLog.Level level, @NonNull String message) { synchronized (mutex) { pendingMessages.add(level.getShortName() + ": " + message); writeQueue.dispatchAsyncOnce(writeQueueTask); } }
public static boolean dispatchOnConversationQueueOnce(DispatchTask task, long delayMillis) { return conversationQueue().dispatchAsyncOnce(task, delayMillis); }
private void scheduleDeviceUpdate() { conversationQueue().dispatchAsyncOnce(deviceUpdateTask); }
private void schedulePersonUpdate() { conversationQueue().dispatchAsyncOnce(personUpdateTask); }
public void scheduleSaveConversationData() { boolean scheduled = conversationDataQueue().dispatchAsyncOnce(saveConversationTask); if (scheduled) { ApptentiveLog.v(CONVERSATION, "Scheduling conversation save."); } else { ApptentiveLog.d(CONVERSATION, "Conversation save already scheduled."); } }
DispatchQueue.mainQueue().dispatchAsyncOnce(toastMessageNotifierTask.setMessage(messageOnToast)); conversationQueue().dispatchAsyncOnce(hostMessageNotifierTask.setMessageCount(getUnreadMessageCount())); } finally { if (listener != null) {
private boolean retryRequest(DispatchQueue networkQueue, int responseCode) { assertFalse(retryDispatchTask.isScheduled()); ++retryAttempt; if (!retryPolicy.shouldRetryRequest(responseCode, retryAttempt)) { ApptentiveLog.v(NETWORK, "Retry policy declined request retry: %s", this); return false; } retrying = true; long retryTimeout = retryPolicy.getRetryTimeoutMillis(retryAttempt); ApptentiveLog.v(NETWORK, "Retry request in %d ms: %s", retryTimeout, this); networkQueue.dispatchAsyncOnce(retryDispatchTask, retryTimeout); return true; }
@Test public void testSchedulingTasksWithException() { DispatchQueue.mainQueue().dispatchAsyncOnce(new DispatchTask() { @Override protected void execute() { addResult("task-1"); } }); DispatchQueue.mainQueue().dispatchAsyncOnce(new DispatchTask() { @Override protected void execute() { throw new RuntimeException(); // throwing an exception should not break the queue } }); DispatchQueue.mainQueue().dispatchAsyncOnce(new DispatchTask() { @Override protected void execute() { addResult("task-2"); } }); dispatchTasks(); assertResult("task-1", "task-2"); } }
@Test public void testSchedulingTasksOnce() { DispatchTask task = new DispatchTask() { @Override protected void execute() { addResult("executed"); } }; assertTrue(DispatchQueue.mainQueue().dispatchAsyncOnce(task)); assertFalse(DispatchQueue.mainQueue().dispatchAsyncOnce(task)); assertFalse(DispatchQueue.mainQueue().dispatchAsyncOnce(task)); dispatchTasks(); assertResult("executed"); assertTrue(DispatchQueue.mainQueue().dispatchAsyncOnce(task)); assertFalse(DispatchQueue.mainQueue().dispatchAsyncOnce(task)); assertFalse(DispatchQueue.mainQueue().dispatchAsyncOnce(task)); dispatchTasks(); assertResult("executed"); DispatchQueue.mainQueue().dispatchAsync(task); DispatchQueue.mainQueue().dispatchAsync(task); dispatchTasks(); assertResult("executed", "executed"); }