2013-10-18 81 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