我有一个AsyncTask作为公共类,如下所示,
public class FetchFromTCWebTask extends AsyncTask<String, Void, String> {
MainActivity mainActivity;
int requestId;
private final static String DEBUG_TAG = "FetchFromTCWebTask";
FetchFromTCWebTask(MainActivity activity, int id) {
mainActivity = activity;
requestId = id;
}
@Override
protected String doInBackground(String[] urls) {
// params comes from the execute() call: params[0] is the url.
try {
return downloadUrl(urls[0]);
} catch (IOException e) {
return "Unable to retrieve web page. URL may be invalid.";
}
}
@Override
protected void onPostExecute(String result) {
mainActivity.loadFinished(result);
}
// Reads an InputStream and converts it to a String.
public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException {
Reader reader = null;
reader = new InputStreamReader(stream, "UTF-8");
char[] buffer = new char[len];
reader.read(buffer);
return new String(buffer);
}
public interface UIListner {
public void loadFinished(String result);
public void loading(int progress);
}
}
现在我想将其称为
(new FetchFromTCWebTask(actviity,1)).execute(url);
(new FetchFromTCWebTask(actviity,2)).execute(url);
(new FetchFromTCWebTask(actviity,3)).execute(url);
现在我的问题是,有什么方法可以并行执行并分别取回1,2和3的结果?如果是,那怎么样?
答案 0 :(得分:1)
使用线程池来实现此目的。
MedicalContactDto
因为我想你要问我怎么写这个(第二十次),这里有一个小例子。我省略了一些部分,因为它们不相关。这是您将id发送回活动以区分它们的方式。如果您需要在(new FetchFromTCWebTask(actviity, 1)).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, url)
(new FetchFromTCWebTask(actviity, 2)).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, url)
(new FetchFromTCWebTask(actviity, 3)).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, url)
内执行不同的任务,那么只需使用switch / case语句。
onPostExecute
答案 1 :(得分:0)
使用自定义线程池。
为什么不在线程池中使用build(AsyncTask.THREAD_POOL_EXECUTOR)?它可以处理的任务限制很小。你如何判断池中的构建是否有效?它很简单,AsyncTask不会启动:)