Skip to content

Commit a1f430a

Browse files
Merge pull request androidannotations#525 from yDelouis/332_DelayInBackground
Add delay in @background
2 parents e837b02 + 98c361a commit a1f430a

4 files changed

Lines changed: 30 additions & 5 deletions

File tree

‎AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/Background.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,5 @@
2828
@Retention(RetentionPolicy.CLASS)
2929
@Target(ElementType.METHOD)
3030
public @interface Background {
31+
long delay() default 0;
3132
}

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/api/BackgroundExecutor.java‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,27 @@
1717

1818
import java.util.concurrent.Executor;
1919
import java.util.concurrent.Executors;
20+
import java.util.concurrent.ScheduledExecutorService;
21+
import java.util.concurrent.TimeUnit;
2022

2123
public class BackgroundExecutor {
2224

2325
private static Executor executor = Executors.newCachedThreadPool();
26+
private static ScheduledExecutorService scheduledExecutor = Executors.newScheduledThreadPool(2 * Runtime.getRuntime().availableProcessors());
2427

2528
public static void execute(Runnable runnable) {
2629
executor.execute(runnable);
2730
}
28-
31+
2932
public static void setExecutor(Executor executor) {
3033
BackgroundExecutor.executor = executor;
3134
}
3235

36+
public static void executeDelayed(Runnable runnable, long delay) {
37+
scheduledExecutor.schedule(runnable, delay, TimeUnit.MILLISECONDS);
38+
}
39+
40+
public static void setScheduledExecutor(ScheduledExecutorService scheduledExecutor) {
41+
BackgroundExecutor.scheduledExecutor = scheduledExecutor;
42+
}
3343
}

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/BackgroundProcessor.java‎

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
*/
1616
package org.androidannotations.processing;
1717

18+
import static com.sun.codemodel.JExpr._new;
19+
import static com.sun.codemodel.JExpr.lit;
20+
1821
import javax.lang.model.element.Element;
1922
import javax.lang.model.element.ExecutableElement;
2023

@@ -26,7 +29,6 @@
2629
import com.sun.codemodel.JClassAlreadyExistsException;
2730
import com.sun.codemodel.JCodeModel;
2831
import com.sun.codemodel.JDefinedClass;
29-
import com.sun.codemodel.JExpr;
3032
import com.sun.codemodel.JInvocation;
3133
import com.sun.codemodel.JMethod;
3234

@@ -52,13 +54,21 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) t
5254

5355
{
5456
// Execute Runnable
57+
Background annotation = element.getAnnotation(Background.class);
58+
long delay = annotation.delay();
59+
5560
JClass backgroundExecutorClass = holder.refClass(BackgroundExecutor.class);
61+
JInvocation executeCall;
5662

57-
JInvocation executeCall = backgroundExecutorClass.staticInvoke("execute").arg(JExpr._new(anonymousRunnableClass));
63+
if (delay == 0) {
64+
executeCall = backgroundExecutorClass.staticInvoke("execute").arg(_new(anonymousRunnableClass));
65+
} else {
66+
executeCall = backgroundExecutorClass.staticInvoke("executeDelayed").arg(_new(anonymousRunnableClass)).arg(lit(delay));
67+
}
5868

5969
delegatingMethod.body().add(executeCall);
70+
6071
}
6172

6273
}
63-
6474
}

‎AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ThreadActivity.java‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import java.util.List;
1919
import java.util.Map;
2020
import java.util.Set;
21-
import java.util.SortedSet;
2221

2322
import org.androidannotations.annotations.Background;
2423
import org.androidannotations.annotations.EActivity;
@@ -40,6 +39,11 @@ void emptyUiMethod() {
4039
@Background
4140
void emptyBackgroundMethod() {
4241

42+
}
43+
44+
@Background(delay = 1000)
45+
void emptyDelayedBackgroundMethod() {
46+
4347
}
4448

4549
@UiThread

0 commit comments

Comments
 (0)