Как реализовать время ожидания для команд в очереди? - PullRequest
0 голосов
/ 07 марта 2019

У меня есть служба Android, которая выполняет некоторые функции для других приложений в системе. Служба выполняет эту работу асинхронно.

Приложение передает объект обратного вызова в службу, и когда работа будет готова, служба выполнит обратный вызов.

Но также возможно, что работа не может быть завершена в заданный период времени, и службе необходимо выполнить обратный вызов со статусом «тайм-аут».

Служба не может заранее знать, будет ли работа приостановлена.

Вот базовый пример того, что я собираюсь сделать:

public class CommandCallback {
    public void onSuccess(String result) { //called if command successful }

    public void onError(int errorCode) { //something went wrong }

    public void onTimeout() { //how will the service call this? }
}

//in the service class there will be API like this:
private ArrayList<CommandData> commands;

public void sendCommand(int command, CommandCallback callback, int waitLength) {
  commads.add(new CommandData(coommand, callback, waitLength);
}

//finally, an application will call the service like this:
bindService(...);
myService.sendCommand(DO_STUFF, new CommandCallback(), WAIT_LENGTH);

Приложение вызывает службу с объектом обратного вызова и количеством секунд ожидания результата. Служба будет хранить ряд различных команд из разных приложений в массиве или на карте или в каком-либо другом динамическом контейнере (предложения приветствуются) вместе с максимальным временем ожидания, указанным каждым приложением.

Мой вопрос такой: Как выполнить каждый обратный вызов по истечении времени ожидания?

Самый простой способ - каждую секунду выполнять итерации по всему массиву, чтобы проверить, есть ли обратные вызовы с истекшим сроком действия, и выполнить их, но мне это кажется очень неэффективным.

Я ищу лучший способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...