我有一個應用程序,它使用幾個HTTPRequests
例如Android上的多線程處理程序的最佳做法是什麼?
得到一個會話ID
得到一些locationdata
得到現有類別
(...)等等
我創建了一個HTTPRequestHandler
,它基本上管理每個請求的所有AsynTasks
...這很好,但我的問題是,我不知道管理不同AsynTasks
的好方法。例如,你需要得到SessionId Task
,你可以在我的HTTPRequestHandler
我有一個隊列,這將啓動取決於AsyncTasks
像這樣開始GetSomeLocationData Task
前:
private void startSessionIdTask(...) {
//...
GetSessionIdTask mGetSessionIdTask = new GetSessionIdTask(this);
mGetSessionIdTask.execute(url);
}
//and from the postExecute() in GetSessionIdTask I call
public void setSessionId(int mSessionId) {
mDataHelper.setmSessionId(mSessionId); //set id
String url = API_URL + API_GET_FAVORITES + URL_VARIABLE;
List<NameValuePair> params = new LinkedList<NameValuePair>();
params.add(new BasicNameValuePair("session_id", getSessionId()));
String paramString = URLEncodedUtils.format(params, "utf-8");
url += paramString;
//and finally start another Tasks (and so one...)
GetLocationsTask mGetLocationsTask = new GetLocationsTask(this);
mGetSessionIdTask.execute(url);
}
然而,這工作得很好,但問題在於(取決於連接),該隊列需要時間,並且用戶可以啓動其他的AsynTasks
,因爲一些最初的數據尚未加載。
我可以設置一些布爾類似isSessionIdLoaded
或可以阻止用戶的用戶界面,但我想知道,如果有更好的解決方案?!
所以我的問題是:有沒有辦法將asyntasks放入某種類型的隊列(ArrayList,Map ..),它將在一行中執行?
AsyncTask的exection在Android 3+上是串行的 – for3st 2013-06-26 21:43:11