Медленная ли асинхронная задача Android? - PullRequest
2 голосов
/ 16 марта 2012

Задача Android Async медленная или я делаю что-то не так?

Вот что я делаю

Log.e("Filler", "before");
new DownloadListContent().execute("string");
Log.e("Filler", "after");

и DownloadListContent () ..

class DownloadListContent extends AsyncTask<Object, Object, Object> {
    protected Void doInBackground(Object... urls) {             
    Log.e("Filler", "Am in doInBackground");

....
}

А вот и logCat.

03-15 23:18:**47**.598: E/Filler(17150): before
03-15 23:18:**47**.598: E/Filler(17150): after
03-15 23:18:**59**.789: E/Filler(17150): Am in doInBackground

Это за 12 секунд до появления фоновой операции. Почему это происходит?

В то же время у меня есть другие экземпляры других классов AsyncTask, выполняющих некоторые другие сетевые задания. Влияет ли AsyncTask друг на друга?

Я действительно не могу понять это!

UPDATE

Спасибо за комментарии. Похоже, что async имеет жесткое ограничение на количество потоков, запускаемых одновременно. Это убийственно, если вам необходимо одновременно загружать несколько изображений вместе с вашими данными.

Следуя методу CommonsWare здесь я могу отделить тип asyncTask, чтобы один тип (изображения) не блокировал другой тип (данные списка).

1 Ответ

5 голосов
/ 16 марта 2012

Правильно, у него ограниченный пул потоков.В Honeycomb размер пула один, поэтому нельзя выполнять две задачи одновременно.Вы можете предоставить своего исполнителя, чтобы несколько задач выполнялись параллельно.Это может не улучшить производительность, поэтому вам следует подумать о некоторой реструктуризации кода:

http://developer.android.com/reference/android/os/AsyncTask.html#executeOnExecutor(java.util.concurrent.Executor, Params ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...