У меня есть служба 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);
Приложение вызывает службу с объектом обратного вызова и количеством секунд ожидания результата.
Служба будет хранить ряд различных команд из разных приложений в массиве или на карте или в каком-либо другом динамическом контейнере (предложения приветствуются) вместе с максимальным временем ожидания, указанным каждым приложением.
Мой вопрос такой:
Как выполнить каждый обратный вызов по истечении времени ожидания?
Самый простой способ - каждую секунду выполнять итерации по всему массиву, чтобы проверить, есть ли обратные вызовы с истекшим сроком действия, и выполнить их, но мне это кажется очень неэффективным.
Я ищу лучший способ.