2017-10-18 46 views
2

我正在開發一個應用程序,並希望將一些數據發送到服務器。當我發送給服務器的更新是定期的時,我能夠將數據發送到服務器。在隊列中調用Asynctask

但現在它在用戶交互。我必須向服務器發送一個或多個呼叫。我不能跳過並忽略對服務器的任何呼叫。只是假設下面的情況:

案例:

讓說,我有它的點擊一個按鈕,我推出一個asyntask是把服務器上的一些數據,讓想這需要5到6秒。但是我想要觸發多個asyntask,如果用戶多次按下按鈕。假設他連續按下7次按鈕。所以7 AsyncTask必須依次運行在一個隊列中。

我聽說過關於schedular和所有其他人,但我無法理解如何使用asynctask與他們一起工作。

可能的解決辦法:我可以禁用按鈕之前,除非第一異步任務還沒有完成,但我真的不想這樣做,因爲根據要求和需要我得叫異步任務多次用戶按下按鈕。

請幫助我,任何源代碼將不勝感激。

注意:使用asynctask我沒有任何更新UI。

更新:

下我需要

我要排隊與特定數據的AsyncTask,當上一個任務完成後必須自動運行,如果用戶退出應用程序應該繼續運行之前,除非它完成所有排隊的asynctask的執行。

+0

你想同時運行嗎? –

+0

根據我的需要我想排隊asynctask與特定的數據,它必須自動運行時,前一個任務完成,如果用戶退出應用程序它應該繼續運行,直到和除非它完成所有排隊asynctask的執行。 –

+0

然後你必須在你的問題中加入這些東西。請編輯你的問題 –

回答

1

讓我們假設他連續按下7次按鈕。所以7 AsyncTask必須依次運行在一個隊列中。

根據您的應用程序目標API,您可能根本不需要做任何特殊的事情。 Official documentation reads:

執行

當首次引入的順序,分別AsyncTasks在單個後臺線程執行 串聯。從DONUT開始,這是 更改爲線程池,允許多個任務在 並行運行。 Honeycomb的開始,任務是在單個 線程執行,以避免因並行執行常見的應用錯誤

因此從Android 3.0的​​開始是你所需要的真正的,這意味着除非你支持的平臺古老的版本你應該默認看到串行執行。

或者,您可以放棄AsyncTask以支持依次執行的IntentService。

+0

這很好。我的最低支持是軟糖豆 –

+0

我已經測試過它,讓它一起運行所有的aysnctask讓我說如果我點擊按鈕兩次,我已經注意到,他們得到掛斷,需要更多的時間,然後通過 –

+0

不知道什麼'超過平常'的意思和你如何衡量它,但問題是如何逐一運行AsyncTasks。我就這樣回答。另外,沒有什麼能夠阻止你編寫自己的隊列來管理提供的解決方案(inl.intentService)不適合你的需求。但這不符合你目前的問題。 –