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");