这是我在 Android 应用程序中所做的示例
public OnClickListener onSelectBtnClicked = new OnClickListener() {
@Override
public void onClick(View v) {
method1();
method2();
}
private void method1() {
Interface.API1();
}
private void method2() {
Interface.API2();
}
};
在这里,我尝试使用外部库,因此我将调用他们的 API 来完成一些工作。现在,当我单击按钮时,它将调用方法1,然后调用方法2
这里的问题是,当调用method1时,它会调用API1,API1会返回状态,但它会在内部创建一些线程并启动一些下载任务。由于API1立即返回,我的程序继续到方法2并开始调用API2
我需要一种方法让我的程序等待 API1 完成其任务
我尝试了Thread.sleep
和等待和通知
,两者都不起作用,因为它停止了主线程,并且还暂停了API正在创建的线程
有什么建议可以让我的程序等待或有其他方法来实现这一点吗?
最佳答案
您(库)使用AsyncTasks
吗?
如果是这样,我认为您由于不同的 API 行为而遇到了问题......
从 Honeycomb 开始,线程使用单个线程池,这意味着始终只有一个线程在运行...结果如下,如果一个线程被阻塞,所有其他线程也会被阻塞... 请参阅http://developer.android.com/reference/android/os/AsyncTask.html#executeOnExecutor%28java.util.concurrent.Executor,%20Params...%29 ,点“执行顺序”
要解决这个问题,您(库)必须将 AsyncTask
与 THREAD_POOL_EXECUTOR
一起使用...
关于java - 让我的线程等待而不阻塞子线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19445940/