示例:
同步维斯里昂:
int weather = getWeather();
异步版本:
getweather(回调)到另一个类,当另一个类准备返回值时,它使用回调。 callback.receiveWeather(temperature); 和回调对象有一个被覆盖的接收天气(int)方法。
问题:
现在如何在Android中将异步方法转换为同步呼叫。 你能举个例子吗? 我知道它有事要做线程,wait()等..但不知道实现它。
以下代码可以执行您想要的操作,但最好只创建一个阻塞 getter 并用 AsyncTask
包装它,以防还需要异步例程。
当这是嵌套的,请确保不要
-
wait()
主线程 - 在同一线程中运行这两个段
特别是如果您使用没有很好地记录的线程机制包装一些仅异步 API,这可以使这两种方法在同一线程上运行。
public class AsyncToSync{
private Object lock= new Object();
private boolean ready = false;
public syncCallToAsyncMethod(){
new AsyncMethodProvider().doAsync(new CompletionListener(){
public void onComplete(){
// TODO: Do some post-processing here
synchronized(lock){
ready = true;
lock.notifyAll();
}
}
})
synchronized (lock) {
while (!ready) {
try {
lock.wait();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}
}
}
请参阅受保护的块。
在调用的方法中,不要调用回调方法并传入结果,而只需返回结果。 因此,请从中更改方法签名:
public void getWeather(WhateverCallback<Type> callback)
对此:
public Type getWeather()