2015-02-23 139 views
0

我該如何獲得一系列連續運行的任務(串行)。我沒有使用AsyncTasks,而是使用loopj AsyncHttpClient,但該問題也適用於其他任務。Android/Java串行執行任務序列

它的結構化方式是:應用程序具有執行多個異步調用的主要方法。這些調用是相互串行的,必須一個接一個地運行。

  • Main()調用FuncA()它觸發異步請求。控制返回到Main()
  • 請求處理程序調用OnFuncAComplete(),這觸發Main()進行:
  • Main()呼叫FuncB()時觸發異步請求。控制返回到Main()
  • 請求處理程序調用OnFuncBComplete(),從而引發Main()着手:
  • 沖洗,重複

我怎麼能寫的主要執行鎖步所有這些功能,我怎麼能暫停Main()並在OnFuncXComplete「觸發器」主返回到行動?我的第一個想法是與ReentrantLock的,但我似乎無法得到它的工作。

編輯:我知道我只能從OnFuncAComplete()撥打電話FuncB(),但後來我進入回調地獄,我想盡量避免。

回答

0

看起來可能有多個解決方案。一種可能性是使用SynchronousQueue在主處理器和處理器之間傳輸任務。的AsyncTask可能不會是必要的,而不是你的任務可以擴展可運行並沒有必要進行回調「解鎖」的Main()

  1. 創建一個運行一個循環,並投票的SynchronousQueue實例的處理線程(可能有超時)。從隊列中獲取的每個元素都是處理器線程剛剛執行的Runnable。
  2. 在你的Main()調用FuncA的(的SynchronousQueue Q,< ...>),FuncB(的SynchronousQueue Q,< ...>)等相繼
  3. 每個FuncX的()插入其運行的任務進入隊列(q)
  4. 確保你能很好地完成你的線程一旦有沒有更多的任務運行
0

看一看IntentService。它是一個只有一個bg線程的Worker服務,請求以FCFS方式排隊和處理。通過BroadcastReceiver您的Main應該事先註冊,您可以通過服務迴應您的Main。