Одновременное обновление нескольких фрагментов [дубликатов]

Для принятия параметров вы должны использовать функции!

Однако $ @ get интерпретируется при создании псевдонима, а не во время выполнения псевдонима, а escape-код не работает. Как решить эту проблему?

Вам нужно использовать функцию оболочки вместо псевдонима, чтобы избавиться от этой проблемы. Вы можете определить foo следующим образом:

function foo() { /path/to/command "$@" ;}

ИЛИ

foo() { /path/to/command "$@" ;}

Наконец, вызовите ваш foo (), используя следующий синтаксис:

foo arg1 arg2 argN

Убедитесь, что вы добавили файл foo () в ~/.bash_profile или ~/.zshrc.

В вашем случае это будет работать

function trash() { mv $@ ~/.Trash; }
21
задан Cameron MacFarland 17 December 2012 в 10:53
поделиться

3 ответа

Вам нужно будет использовать thread pool Executor для выполнения AsyncTask. Реализация по умолчанию использует последовательный исполнитель, работающий на одном потоке

. Создайте ThreadPoolExecutor , а затем используйте

AsyncTask executeOnExecutor вместо просто выполните метод

32
ответ дан Pradeep 21 August 2018 в 04:20
поделиться
  • 1
    Есть какой-то недостаток, используя этот метод. То есть вам нужно сделать дополнительную работу, сделав параллельную параллель AsyncTask? – Gee.E 18 March 2014 в 12:56
  • 2
    @ Gee.E с использованием исполнителя по умолчанию лучше, поскольку создается только один поток, поэтому, если у вас не слишком много задач, запущенных одновременно, исполнитель по умолчанию обеспечивает лучшую производительность, но если есть одна асинтеза, которая принимает много вам понадобится ThreadPoolExecutor – nandeesh 18 March 2014 в 13:07
  • 3
    @nandeesh Roger, я использую параллельную задачу для извлечения данных из кэшированной базы данных. По сложным причинам мне нужно, чтобы задача-сборщик выполнялась параллельно, но с тех пор, как это требуется, пренебрежимо мало, я не вижу провалов производительности. Независимо от того, спасибо за объяснение проблемы. – Gee.E 18 March 2014 в 13:18
  • 4
    Следует отметить, что executeOnExecuter создаст гонку данных, поэтому вам нужно быть осторожным. – Abubakar 24 April 2018 в 10:05

Другой вариант - использование AsyncTaskCompat из библиотеки поддержки v.4.

AsyncTaskCompat.executeParallel(new AsyncTask<Void, Void, Object>() {
    @Override
    protected Object doInBackground(Void... params) {
        // do your parallel task here
        return null;
    }

    @Override
    protected void onPostExecute(Object result) {
        // and fetch result
    }
});
4
ответ дан Arsenius 21 August 2018 в 04:20
поделиться
  • 1
    Этот класс был отменен в API-уровне 26 и удален в API-уровне 27 – Shayan Pourvatan 29 January 2018 в 19:25

В AsyncTask произошли изменения в выпуске Honeycomb. В старых версиях был пул потоков из 10 потоков, поэтому вы могли запускать 10 задач параллельно. Но для Honeycomb и up по умолчанию используется последовательный исполнитель, который выполняет задачи один за другим. Но вы можете передать ThreadPoolExecutor для выполнения:

   if (Build.VERSION.SDK_INT >= 11) {
     //--post GB use serial executor by default --
     task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
   } else {
     //--GB uses ThreadPoolExecutor by default--
     task.execute();
   }
37
ответ дан S.D. 21 August 2018 в 04:20
поделиться
  • 1
    Вам не нужно указывать последний аргумент new Void[]{}; опуская его будет достаточно. – Paul Lammertsma 27 March 2013 в 13:02
  • 2
    Ваша IDE неверна; varargs являются ярлыками для создания массивов, поэтому, конечно, список параметров может быть пустым. Фактически, предоставление нового массива, как и у вас, на самом деле плохое; вы бесполезно создаете объект. GC необходимо будет зайти и приостановить ваше приложение на несколько миллисекунд, чтобы очистить его снова. – Paul Lammertsma 28 March 2013 в 14:14
  • 3
    Благодаря! Работает как шарм. И документация на Android не могла быть яснее по этому вопросу: «public static final Executor THREAD_POOL_EXECUTOR. Добавлен в уровень API 11 - Исполнитель, который может использоваться для одновременного выполнения задач. & Quot; – Luis 4 November 2014 в 18:00
Другие вопросы по тегам:

Похожие вопросы: