Use elapsed time since boot rather than wall clock time.

This commit is contained in:
akwizgran
2020-08-04 10:55:42 +01:00
parent f1bde4e75c
commit 090123579d
2 changed files with 5 additions and 9 deletions

View File

@@ -11,7 +11,6 @@ import android.os.SystemClock;
import org.briarproject.bramble.api.lifecycle.Service; import org.briarproject.bramble.api.lifecycle.Service;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.system.AlarmListener; import org.briarproject.bramble.api.system.AlarmListener;
import org.briarproject.bramble.api.system.Clock;
import org.briarproject.bramble.api.system.TaskScheduler; import org.briarproject.bramble.api.system.TaskScheduler;
import java.util.ArrayList; import java.util.ArrayList;
@@ -51,7 +50,6 @@ class AndroidTaskScheduler implements TaskScheduler, Service, AlarmListener {
private static final long ALARM_MS = INTERVAL_FIFTEEN_MINUTES; private static final long ALARM_MS = INTERVAL_FIFTEEN_MINUTES;
private final Application app; private final Application app;
private final Clock clock;
private final ScheduledExecutorService scheduledExecutorService; private final ScheduledExecutorService scheduledExecutorService;
private final AlarmManager alarmManager; private final AlarmManager alarmManager;
@@ -59,10 +57,9 @@ class AndroidTaskScheduler implements TaskScheduler, Service, AlarmListener {
@GuardedBy("lock") @GuardedBy("lock")
private final Queue<ScheduledTask> tasks = new PriorityQueue<>(); private final Queue<ScheduledTask> tasks = new PriorityQueue<>();
AndroidTaskScheduler(Application app, Clock clock, AndroidTaskScheduler(Application app,
ScheduledExecutorService scheduledExecutorService) { ScheduledExecutorService scheduledExecutorService) {
this.app = app; this.app = app;
this.clock = clock;
this.scheduledExecutorService = scheduledExecutorService; this.scheduledExecutorService = scheduledExecutorService;
alarmManager = (AlarmManager) alarmManager = (AlarmManager)
requireNonNull(app.getSystemService(ALARM_SERVICE)); requireNonNull(app.getSystemService(ALARM_SERVICE));
@@ -82,7 +79,7 @@ class AndroidTaskScheduler implements TaskScheduler, Service, AlarmListener {
@Override @Override
public Future<?> schedule(Runnable task, long delay, TimeUnit unit) { public Future<?> schedule(Runnable task, long delay, TimeUnit unit) {
long now = clock.currentTimeMillis(); long now = SystemClock.elapsedRealtime();
long dueMillis = now + MILLISECONDS.convert(delay, unit); long dueMillis = now + MILLISECONDS.convert(delay, unit);
ScheduledTask s = new ScheduledTask(task, dueMillis); ScheduledTask s = new ScheduledTask(task, dueMillis);
if (dueMillis <= now) { if (dueMillis <= now) {
@@ -120,7 +117,7 @@ class AndroidTaskScheduler implements TaskScheduler, Service, AlarmListener {
} }
private void runDueTasks() { private void runDueTasks() {
long now = clock.currentTimeMillis(); long now = SystemClock.elapsedRealtime();
List<ScheduledTask> due = new ArrayList<>(); List<ScheduledTask> due = new ArrayList<>();
synchronized (lock) { synchronized (lock) {
while (true) { while (true) {

View File

@@ -4,7 +4,6 @@ import android.app.Application;
import org.briarproject.bramble.api.lifecycle.LifecycleManager; import org.briarproject.bramble.api.lifecycle.LifecycleManager;
import org.briarproject.bramble.api.system.AlarmListener; import org.briarproject.bramble.api.system.AlarmListener;
import org.briarproject.bramble.api.system.Clock;
import org.briarproject.bramble.api.system.TaskScheduler; import org.briarproject.bramble.api.system.TaskScheduler;
import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.RejectedExecutionHandler;
@@ -37,10 +36,10 @@ public class AndroidTaskSchedulerModule {
@Provides @Provides
@Singleton @Singleton
AndroidTaskScheduler provideAndroidTaskScheduler( AndroidTaskScheduler provideAndroidTaskScheduler(
LifecycleManager lifecycleManager, Application app, Clock clock) { LifecycleManager lifecycleManager, Application app) {
lifecycleManager.registerForShutdown(scheduledExecutorService); lifecycleManager.registerForShutdown(scheduledExecutorService);
AndroidTaskScheduler scheduler = AndroidTaskScheduler scheduler =
new AndroidTaskScheduler(app, clock, scheduledExecutorService); new AndroidTaskScheduler(app, scheduledExecutorService);
lifecycleManager.registerService(scheduler); lifecycleManager.registerService(scheduler);
return scheduler; return scheduler;
} }