java - 让我的线程等待而不阻塞子线程

标签 java android multithreading

这是我在 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 ,点“执行顺序”

要解决这个问题,您(库)必须将 AsyncTaskTHREAD_POOL_EXECUTOR 一起使用...

关于java - 让我的线程等待而不阻塞子线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19445940/

相关文章:

java - getReseources() 位图数组出现 NullPointerException

java - Android 视频播放器中的方向更改

java - 读取另一个 Android 应用程序的共享首选项

java - RavenDB 查询返回 null

java - MQ消息中的RFH头是什么及其用途

python - python中的多线程是一个神话吗?

android - android中的HttpClient在接收到内容时是否进行内存/磁盘缓存?

java - 使用 jsoup 抓取数据

java - 在线程内使用 for 循环与类似的 while 循环行为不匹配

java - 在监视器上同步