2015-03-10 3 views
1

Я выгружаю много фоновых операций (например, веб-доступ и операции с БД) в AsyncTasks, чтобы ускорить выполнение моего приложения. Он частично работает, потому что пользовательский интерфейс не зависает. Но для приложения все еще требуется долгое время (то есть завершение фоновых задач).Почему потоки AsyncTask работают один за другим?

При просмотре логарифма я заметил, что все фоновые задачи (AsyncTask) запускаются один за другим. Нет параллелизма. Как можно написать действительно многопоточное приложение?

ответ

3

Чтение документации AsyncTask вы можете видеть, что Android действительно запускает все задачи, не связанные с основным потоком, в одном потоке. См. «Порядок выполнения» в http://developer.android.com/reference/android/os/AsyncTask.html

Но у вас также есть решение: используйте executeOnExecutor(java.util.concurrent.Executor, Object[]) с THREAD_POOL_EXECUTOR.

+0

Вы должны просто выполнять фоновые работы в потоках, если не хотите дождаться окончания. Нити AsyncTask всегда будут запускаться один за другим. – Xjasz

+0

Вы правы, Xjasz, если единственная цель заключалась в том, чтобы выполнить длинную задачу. Но я использую эти (короткие) AsyncTasks для обновления пользовательского интерфейса. Я запускаю много запросов и вычислений с помощью моего бэкэнд (выборка изображений, статистика обновлений и т. Д.), Которые обновляют пользовательский интерфейс независимо друг от друга. Для этого у вас есть AsyncTasks. Тот факт, что Google решил сериализовать все фоновые задачи не потому, что это лучший дизайн платформы, а потому, что он сломал много устаревших приложений. И теперь, когда средний телефон имеет 4 ядра, до 8, стыдно, что Android маскирует полезные функции AsyncTask. – Shoham

+0

Какова ваша проблема? Если вы хотите обновить ui из Thread, просто создайте обработчик или RunOnUI. При попытке обновить пользовательский интерфейс меня всегда раздражал AsncTask. С тех пор, как я узнал, как Handlers и RunOnUi сделали мою жизнь намного проще. Если хочешь, я могу собрать простой метод. – Xjasz

Смежные вопросы