Возможно ли запустить одновременно несколько AsyncTask?
У меня два действия в моем приложении. В моей работе A Я использую одну AsyncTask, а вторую активность B также использует другую AsyncTask. В моей работе A Я загружаю некоторые данные на сервер и в свою активность B. Я пытаюсь загрузить некоторые другие данные с сервера. Оба они работают в AsyncTask. Моя проблема в том, что когда я пытаюсь загрузить данные с сервера в Activity B, onPreExecute()
был вызван, но doInBackground()
не был вызван, он ожидает завершения действия doInBackground()
действия Activity A. Почему это случилось? Возможно ли одновременно запускать несколько фоновых действий.
В действии А
ImageButton submit_button = (ImageButton) findViewById(R.id.submit_button); submit_button.setOnClickListener(new OnClickListener() { public void onClick(View record_button) { new Save_data().execute(); } }); class Save_data extends AsyncTask { protected void onPreExecute() { } protected Integer doInBackground(String... arg0) { //uploading data here } }
В моей деятельности B
- Получение программной версии ОС на Android программно
- Gradle - Что такое ненулевое значение выхода и как его исправить?
- как использовать 32-разрядные собственные библиотеки на 64-битной платформе Android-L
- Как перемещать текст по изображению
- Настраиваемые виджеты в Android
ImageButton get_button = (ImageButton) findViewById(R.id.get_button); get_button.setOnClickListener(new OnClickListener() { public void onClick(View record_button) { new download_process().execute(); } }); class download_process extends AsyncTask { protected void onPreExecute() { Log.e("pre-execute","has been called");//This Log works well } protected Integer doInBackground(String... arg0) { //downloading data here } }
- System.loadLibrary (...) не смог найти родную библиотеку в моем случае
- Как запустить переднюю камеру с намерением?
- findViewById vs Просмотр шаблона владельца в адаптере ListView
- TextView.setTextSize ведет себя ненормально - как установить размер текстового изображения динамически для разных экранов
- Позвоните в getLayoutInflater () в местах, где нет активности
- Предназначение камеры Android Сохранение ландшафта изображения при съемке
- Android Studio не удалось найти версию, совместимую с com.android.support:appcompat-v7:+
- Как ограничить приложение Android конкретным устройством?
использовать исполнителя следующим образом
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { new Save_data().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, location); } else { new Save_data().execute(location); }
См. Это
Да, это так, но, поскольку Honeycomb, есть изменения в способе обработки AsyncTask
на Android. Из HC + они выполняются последовательно, а не запускаются параллельно, как это было раньше. Решение состоит в том, чтобы вызвать их так (поместить его в отдельный class инструментов или так):
public class AsyncTaskTools { public static > void execute(T task) { execute(task, (P[]) null); } @SuppressLint("NewApi") public static
> void execute(T task, P... params) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params); } else { task.execute(params); } } }
а затем вы можете просто позвонить:
AsyncTaskTools.execute( new MyAsyncTask() );
или с параметрами (однако я скорее предлагаю passign params через конструктор задач):
AsyncTaskTools.execute( new MyAsyncTask(), );