2013-10-18 78 views
1

下面是我在我的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来完成一些工作。现在当我点击按钮时,它会调用method1然后method2

这里的问题是当调用method1时它会调用API1并且API1将返回状态,但它会在内部创建一些线程并启动一些下载任务。由于API1立即返回,我的程序进入方法2,并开始打电话API2

我需要一种方法来让我的计划,等待我的API1完成其任务

我试过了,Thread.sleepwait and notify,既没有工作,因为它停止主线程,它也暂停API正在创建的线程

任何建议,使我的程序等待或任何其他方式来实现这一目标?

+0

为什么不使用处理程序 – Raghunandan

+1

使用线程,将其称为ThredManager,启动其他线程并使用倒数计时器在Android中同步 – Blackbelt

+0

,则有[AsyncTask](http://developer.android.com/reference/android/os/AsyncTask.html)。 .. – Fildor

回答

0

你(图书馆)使用AsyncTasks

如果是这样,我想你,因为不同的API行为问题......

从蜂窝起,线程使用一个线程池,这意味着永远只有一个线程在运行...在下面得到的,如果一个线程被阻塞,其他线程被阻塞,以及... 见http://developer.android.com/reference/android/os/AsyncTask.html#executeOnExecutor%28java.util.concurrent.Executor,%20Params...%29,点

“执行令”,解决这个问题,你(库)必须使用AsyncTaskTHREAD_POOL_EXECUTOR。 ..

+0

现在它对我为什么面临问题很有意义。我不知道图书馆内部正在做什么,因为它是由不同的团队编写的。在我的代码中有什么我能做的来实现我所需要的吗? –

+0

你使用'AsyncTasks'吗?我认为,如果没有,你有另一个问题...我编辑我的帖子,并删除线程的评论...'AsyncTasks'有一个共同的线程池...如果你使用线程,他们将是独立的... ...每个线程都是一个新的并行线程,然后... – prom85