Java Android如何实现异步任务的并行执行
我需要允许多个异步任务同时运行。 这是我的异步任务:Java Android如何实现异步任务的并行执行,java,android,api,android-activity,android-asynctask,Java,Android,Api,Android Activity,Android Asynctask,我需要允许多个异步任务同时运行。 这是我的异步任务: private void callAPI(String user_id) { new AsyncTask<Void, Void, String>() { protected String doInBackground(Void... parameters) { List<NameValuePair> params = new ArrayList&
private void callAPI(String user_id) {
new AsyncTask<Void, Void, String>() {
protected String doInBackground(Void... parameters) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("user_id", user_id));
return api.post("", params);
}//end doInBackground
protected void onPostExecute(String result) {
Log.i(TAG + "POST() => " + result);
}//end onPostExecute
}.execute(); //end AsyncTask
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB) // API 11
void startMyTask(AsyncTask asyncTask) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
else
asyncTask.execute(params);
}
异步任务
private class YourAsyncTask extends AsyncTask<Integer, Integer, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
Toast.makeText(mContext, "Please wait..Fetching Data",
Toast.LENGTH_LONG).show();
}
@Override
protected String doInBackground(Integer... params) {
Log.e("passing value",""+params[0]);
String uri = "http://abcd.com/ServiceTest.php?id="
+ params[0];
Log.e("passing value",""+uri);
return SetServerString;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(SetServerString);
}
私有类YourAsyncTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
Toast.makeText(mContext,“请稍候..正在获取数据”,
Toast.LENGTH_LONG).show();
}
@凌驾
受保护字符串doInBackground(整数…参数){
Log.e(“传递值”,“参数+0”);
字符串uri=”http://abcd.com/ServiceTest.php?id="
+参数[0];
Log.e(“传递值”,即“+uri”);
返回SetServerString;
}
@凌驾
受保护的void onPostExecute(字符串结果){
onPostExecute(SetServerString);
}
希望它能帮助您!从AsynTask创建调用,并从MainActivity同步创建调用类:
public class ApiCalling extends AsyncTask<String, Void, String>() {
protected String doInBackground(String... parameters) {
Log.d("LogTag","starting Async Task:"+parameters[0]);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("user_id", user_id));
return api.post("", params);
}//end doInBackground
protected void onPostExecute(String result) {
Log.i(TAG + "POST() => " + result);
}//end onPostExecute
}.execute(); //end AsyncTask
您面临的问题是什么。只要堆内存没有被占用,您就可以运行任意多个。我的初始AsyncTask未执行您的代码似乎正常。您是否尝试过调试或将logcat放入doInbackground方法中。它必须运行。但我看到要运行多个AsyncTask,您需要使用@TargetApi上方的代码(Build.VERSION_CODES.HONEYCOMB)…-但是我不知道如何在我的方法中实现它Hello Rohit,谢谢你的回答。但是当我创建一个新的异步时,我怎么能把它包括进来呢?例如上面的代码?=new AsyncTask(){…-P.S我是Android的新手如果我理解正确,您是否想向asynctask发送参数?如果不想,您可以传递asynctask,它就会工作谢谢,我现在就试试。您能解释一下这意味着什么吗?
AsyncTaskExecutor.ExecuteConcurrent(新的YourAsyncTask()、第一个参数、第二个参数等等);
private class YourAsyncTask extends AsyncTask<Integer, Integer, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
Toast.makeText(mContext, "Please wait..Fetching Data",
Toast.LENGTH_LONG).show();
}
@Override
protected String doInBackground(Integer... params) {
Log.e("passing value",""+params[0]);
String uri = "http://abcd.com/ServiceTest.php?id="
+ params[0];
Log.e("passing value",""+uri);
return SetServerString;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(SetServerString);
}
public class ApiCalling extends AsyncTask<String, Void, String>() {
protected String doInBackground(String... parameters) {
Log.d("LogTag","starting Async Task:"+parameters[0]);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("user_id", user_id));
return api.post("", params);
}//end doInBackground
protected void onPostExecute(String result) {
Log.i(TAG + "POST() => " + result);
}//end onPostExecute
}.execute(); //end AsyncTask
ApiCalling mObj = new ApiCalling();
mObj.execute("call 1");
/* if the task inside asyn task if long, then better to get new reference of Async task and execute other task */
ApiCalling mObj = new ApiCalling();
mObj.execute("call 2");