【发布时间】:2016-06-23 18:58:18
【问题描述】:
我在我的项目中使用异步 XML-RPC-Client (https://github.com/gturri/aXMLRPC),并使用此客户端的异步回调方法编写了一些方法,如下所示:
public void xmlRpcMethod(final Object callbackSync) {
XMLRPCCallback listener = new XMLRPCCallback() {
public void onResponse(long id, final Object result) {
// Do something
if (callbackSync != null) {
synchronized (callbackSync) {
callbackSync.notify();
}
}
}
public void onError(long id, final XMLRPCException error) {
// Do something
if (callbackSync != null) {
synchronized (callbackSync) {
callbackSync.notify();
}
}
}
public void onServerError(long id, final XMLRPCServerException error) {
Log.e(TAG, error.getMessage());
if (callbackSync != null) {
synchronized (callbackSync) {
callbackSync.notifyAll();
}
}
}
};
XMLRPCClient client = new XMLRPCClient("<url>");
long id = client.callAsync(listener, "<method>");
}
在其他方法中,我喜欢调用此方法(此处为“xmlRpcMethod”)并等待它完成。我写了这样的方法:
public void testMethod(){
Object sync = new Object();
xmlRpcMethod(sync);
synchronized (sync){
try{
sync.wait();
}catch(Interrupted Exception e){
e.printStackTrace();
}
}
// Do something after xmlRcpFinished
}
但是当项目变得更大并且我需要等待许多请求完成时,这种等待和同步的方式变得很丑陋。 那么这是唯一可能/最好的方法吗?或者有人知道更好的解决方案吗?
【问题讨论】:
-
你听说过 Futures 和 ExecutorService 吗?你甚至可以使用并发集合来做到这一点。
-
期货似乎很有趣!感谢这些提示!
标签: java asynchronous callback synchronization asynccallback