0

我需要使用现有的 API,假设它将直接在 Activity 中的简单应用程序中使用。我的用例需要从 Service 中调用 API 并等待所需的 Handler 返回所需的数据。

我尝试了许多 Java 并发选项,但都没有成功。任何人都可以提出更好的方法吗?

下面是一个大大简化的示例,它比工作示例更伪代码。

public class dataConnection {

Controlx xControl;
CountDownLatch doneSignal = new CountDownLatch(1);
Context c = null;

private String data1;

Handler mHandler = new Handler() { 
    @Override
    public void handleMessage(Message msg) {
        setReturnData(msg);
        doneSignal.countDown();
    }
};

public dataConnection(Context ctx) { 
    this.c = ctx;
    xControl = new Controlx (c, mHandler);
}       

private void setReturnData(int rc) {
    this.rc = rc;
}

private int getReturnData() {
    return this.rc;
}

public int getRealData() {

    //API will timeout in 10 seconds if data is not retrieved before that
        xControl.dataCmd(10);

    //Wait here for handler to finish and then retrieve data to return
    doneSignal.await(); 

    int i = getReturnData();

    Log.v("log_tag", "RETURN NOW!!!!!!!!!!!!!!!");
    return data;
}
4

1 回答 1

0

如果Handler使用与方法相同的线程,getRealData()您将阻止它看到Message. 必须先完成一件事,Looper然后才能处理任何新事物。

如果您为处理程序创建一个新线程和循环器,它将允许它们单独运行。根据您的需要,Future<Integer>对象也可能有用。

活套 | 安卓开发者

未来 | 安卓开发者

于 2013-09-24T03:57:15.227 回答