如何解决在先前的可运行对象完成执行后如何运行可运行对象?
我创建了两个arraylist,一个是runnable,另一个是boolean。当用户单击按钮时,可运行对象将添加到arraylist。如果可运行数组列表为空,则处理程序会立即调用第一个可运行数组。当可运行数组完成执行时,将布尔值true对应于可运行数组列表添加到布尔数组列表,这表明特定位置的索引已完成执行。到这里一切都很好。当可运行的数组列表具有多个可运行的数组时,会发生此问题。这是我的代码:
ArrayList<Runnable> runnables = new ArrayList<>();
ArrayList<Boolean> runnablesExecuted = new ArrayList<>();
HandlerThread handlerThread = new HandlerThread("testThread");
handlerThread.start();
Looper looper = handlerThread.getLooper();
Handler handler = new Handler(looper);
button.setOnClickListener(new View.OnClickListener() {
Runnable process = new Runnable() {
@Override
public void run() {
if(processFinishedExecuting) {
runnablesExecuted.add(true);
}
}
};
runnables.add(process);
if(runnablesExecuted.isEmpty()) {
handler.post(runnables.get(0))
} else {
handlerLoop();
}
});
private void handlerLoop() {
final Handler looper = new Handler();
looper.postDelayed(new Runnable() {
@Override
public void run() {
int runnableSize = runnables.size();
int executedSize = runnablesExecuted.size();
if(executedSize ==runnableSize-1) {
if(executedSize .get(runnableSize-2)) {
handler.post(runnables.get(executedSize));
looper.removeCallbacks(this);
}
}
}
},2000);
}
问题发生在handlerLoop()方法中。但是,如果我手动等待直到上一个可运行的执行完成,就可以了。但是我想添加一个函数,当用户单击按钮时,即使有延迟,可运行对象也会一个接一个地调用,甚至应该在后台运行。该过程应该是自动的。最后,当用户单击“确定”按钮时,如果arraylist中的每个可运行对象尚未执行,则将显示进度条,直到完成执行为止。 (这可以通过检查两个arraylist的大小是否相等来完成,但是我希望您提出建议,因为这应该实时发生)。希望你会厌烦。问候。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。