我正在开发一个 Android 应用程序,该应用程序必须发出服务器请求,然后在请求完成时执行操作。这里有一些伪代码来帮助解释这种情况:
makeRequest(new SomeTask{
onDone() {
// Do actionB with queue
}
});
// Do actionA with queue. Must be execute first!!
这是makeRequest
伪代码中的实现:
makeRequest(SomeTask task) {
if(canDoOptimization) { // if true, don't need to make request
// It's a bad idea to execute this immediately.
// Wish I could wait until the current thread of execution was done...
task.onDone();
return;
}
asyncTask = new AsyncTask<SomeTask, Void, Void>() {
doInBackground(SomeTask... task) {
// Make server request...
task.onDone();
}
}
asyncTask.execute(task);
}
通常在预期actionA
之前发生actionB
,但在我们可以避免网络请求的情况下,SomeTask.execute
会立即调用。这导致之前actionB
发生,这是不好的。有什么办法可以保证这不会发生吗? actionA
我在javascript中多次遇到这种情况。在这些情况下,我会用 a or包装SomeTask.execute
调用以保持正确的异步语义。setTimeout
setImmediate
为清楚起见,以下是 JavaScript 中相同错误的示例:https ://gist.github.com/xavi-/5882483
知道我应该在 Java/Android 中做什么吗?