如何在Android中将异步方法调用(回调)转换为同步方法调用



示例:

同步维斯里昂:

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()

相关内容

  • 没有找到相关文章

最新更新