如何对排队的命令实施超时?

时间:2019-03-07 07:20:30

标签: java android multithreading service

我有一个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);

应用程序使用回调对象和等待结果的秒数来调用服务。 该服务将在阵列或映射或其他动态容器(欢迎提出建议)中存储来自不同应用程序的许多不同命令,以及每个应用程序指定的最长等待时间。

我的问题是这样的: 在等待时间到期后如何执行每个回调?

最简单的方法是每秒遍历整个数组以检查是否有过期的回调并执行它们,但这对我来说似乎效率很低。

我正在寻找更好的方法。

0 个答案:

没有答案