我有一个Android应用程序,目前正在打开一个webview活动。当它这样做时,它会在webview中加载网页的同时启动异步调用以下载一些数据。
一旦网页和数据准备就绪,我想将数据发送到webview。
我一直在寻找一个好的数据结构来做到这一点。目前我正在做这样的事情:
private String data;
private AtomicBoolean bothReady = new AtomicBoolean(false);
public void dataDownloaded(String data) {
this.data = data;
sendDataIfReady();
}
public void pageLoaded() {
sendDataIfReady();
}
private void sendDataIfReady() {
if (bothReady.getAndSet(true)) {
sendData(this.data);
}
}
这是一个简化版本,但这是它的要点。这感觉就像一个笨重的方式,我想知道在Java中是否有一个良好的数据结构,排队准备好的数据然后在页面准备就绪时发送它,无论哪个完成(并明显处理竞争条件等)。
感谢您的帮助。
答案 0 :(得分:1)
对于异步请求,我建议您使用ScheduledExecutorService:
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(20);
然后你可以定义AsyncNotice类:
class AsyncNotice implements Runnable {
@Override
public void run() {
// do some needed work
}
}
然后你可以这样做:
scheduler.schedule(new AsyncNotice(), 5, TimeUnit.SECONDS);
或
scheduler.execute(new AsyncNotice());
这会返回ScheduledFuture,因此您甚至可以在将来取消它。