我有一个应用程序,使用了几个HTTP请求,例如:
获取会话ID
获取一些位置数据
获取现有类别
(...)等等
我创建了一个HTTPRequestHandler
,基本上管理每个请求的所有AsynTasks
...这很好用,但我的问题是,我不知道如何有效地管理不同的AsynTasks
。例如,在开始GetSomeLocationData Task
之前,您需要获取SessionId Task
。
因此,在我的HTTPRequestHandler
中,我有一个队列,启动依赖的AsyncTasks
,例如:
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
,或者为用户阻止UI,但我想知道是否有更好的解决方案?所以我的问题是:是否有一种将asyntasks放入某种队列(ArrayList、Map等)中并按顺序执行的方法?