Index: components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTask.java |
diff --git a/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTask.java b/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTask.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c2fe1a71e9fceb3a818b5ccc520615aad1dd1c3d |
--- /dev/null |
+++ b/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTask.java |
@@ -0,0 +1,72 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.components.background_task_scheduler; |
+ |
+import android.content.Context; |
+import android.support.annotation.AnyThread; |
+import android.support.annotation.MainThread; |
+ |
+/** |
+ * Entry point for callbacks from {@link BackgroundTaskScheduler}. Any classes implementing |
+ * this interface must have a public constructor which takes no arguments. |
+ * The callbacks will be executed on the main thread, which means that execution logic must be |
+ * offloaded to another {@link Thread}, {@link android.os.Handler} or {@link android.os.AsyncTask}. |
+ */ |
+public interface BackgroundTask { |
+ /** |
+ * Callback to invoke whenever background processing has finished after first returning true |
+ * from {@link #onStartTask(Context, TaskParameters, TaskFinishedCallback)}. |
+ */ |
+ interface TaskFinishedCallback { |
+ /** |
+ * Callback to inform the {@link BackgroundTaskScheduler} that the background processing |
+ * now has finished. When this callback is invoked, the system will stop holding a wakelock. |
+ * |
+ * @param needsReschedule whether this task must be rescheduled. |
+ */ |
+ @AnyThread |
+ void taskFinished(boolean needsReschedule); |
+ } |
+ |
+ /** |
+ * Callback from {@link BackgroundTaskScheduler} when your task should start processing. |
+ * It is invoked on the main thread, and if your task finishes quickly, you should return false |
+ * from this method when you are done processing. If this is a long-running task, you should |
+ * return true from this method, and instead invoke the {@link TaskFinishedCallback} when the |
+ * processing is finished on some other {@link Thread}, {@link android.os.Handler} or |
+ * {@link android.os.AsyncTask}. While this method is running the system holds a wakelock. If |
+ * false is returned from this method, the wakelock is immediately released, but if this method |
+ * returns true, the wakelock is not released until either the {@link TaskFinishedCallback} is |
+ * invoked, or the system calls {@link #onStopTask(Context, TaskParameters)}. |
+ * |
+ * @param context the current context. |
+ * @param taskParameters the data passed in as {@link TaskInfo} when the task was scheduled. |
+ * @param callback if the task needs to continue processing after returning from the call to |
+ * {@link #onStartTask(Context, TaskParameters, TaskFinishedCallback)}, this |
+ * callback must be invoked when the processing has finished. |
+ * @return true if the task needs to continue processing work. False if there is no more work. |
+ * @see TaskInfo |
+ */ |
+ @MainThread |
+ boolean onStartTask( |
+ Context context, TaskParameters taskParameters, TaskFinishedCallback callback); |
+ |
+ /** |
+ * Callback from {@link BackgroundTaskScheduler} when the system has determined that the |
+ * execution of the task must stop immediately, even before the {@link TaskFinishedCallback} |
+ * has been invoked. This will typically happen whenever the required conditions for the task |
+ * are no longer met. See {@link TaskInfo}. A wakelock is held by the system while this callback |
+ * is invoked, and immediately released after this method returns. |
+ * |
+ * @param context the current context. |
+ * @param taskParameters the data passed in as {@link TaskInfo} when the task was scheduled. |
+ * @return true if the task needs to be rescheduled according to the rescheduling criteria |
+ * specified when the task was scheduled initially. False if the taskshould not be rescheduled. |
+ * Regardless of the value returned, your task must stop executing. |
+ * @see TaskInfo |
+ */ |
+ @MainThread |
+ boolean onStopTask(Context context, TaskParameters taskParameters); |
+} |