Проблема Android с AsyncTask - PullRequest
       0

Проблема Android с AsyncTask

4 голосов
/ 29 июля 2010

Кто-нибудь может посоветовать следующее: я пытаюсь выполнить код со страницы справки Android, но у меня это не работает:

public class DownloadFilesTask extends AsyncTask<String, Integer, Long> {
        protected Long doInBackground(String... urls) {
            Log.e("TuneWiki", "Exec");
            return 1l;
        }

        @Override
        protected void onPostExecute(Long result) {
            Log.e("TuneWiki", "Post");
        }
}

, когда я выполняю задачу, doInBackground вызывается нормально,но onPostExecute никогда не вызывается: (

Протестировано на Milestone с ОС 2.1

Ответы [ 2 ]

6 голосов
/ 30 июля 2010

Спасибо всем - я нашел причину. AsyncTask по какой-то причине перестает работать, если раньше было запущено много потоков, даже если все потоки были успешно завершены.

1 голос
/ 26 октября 2012

Не рекомендуется использовать AsyncTasks для загрузки файлов (как следует из названия вашего AsyncTask). AsyncTasks не следует использовать для длительных операций, таких как работа в сети. Действительно, у AsyncTask есть две основные проблемы, которые связаны:

  • они плохо привязаны к жизненному циклу активности
  • утечка памяти при создании очень легко.

В приложении RoboSpice Мотивации ( доступно в Google Play ) мы подробно ответим на этот вопрос. Он даст подробное представление об AsyncTasks, Loaders, их функциях и недостатках, а также познакомит вас с альтернативным решением для сетевых запросов: RoboSpice.

Мы даже предоставили инфографику , чтобы объяснить эту проблему. В нескольких словах

  • AsyncTasks имеют недостатки, поскольку они плохо привязаны к Activity Lifecycle и создают утечки памяти
  • Загрузчики довольно хороши для того, для чего они предназначены: для доступа к курсорам баз данных Sqlite, но не предлагают никакой поддержки для работы в сети. Они не тот инструмент для этого.
  • RoboSpice выполняет сетевые запросы в службе, ваши загрузки выполняются в службе Android, память хорошо управляется и даже поддерживает запись REST-запросов.

Я рекомендую вам загрузить приложение RoboSpice Motivations , оно действительно подробно объясняет это и предоставляет примеры и демонстрации различных способов выполнения некоторых фоновых операций.

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