AsyncTask для нескольких действий? - PullRequest
2 голосов
/ 23 марта 2011

Эй, ребята, я мог найти только 1 ветку по этому вопросу, и она не ответила на мой вопрос, поэтому я спрашиваю себя.

Мое приложение загружает и анализирует файл rss, и я, очевидно, решил сделать это в фоновом режиме. Я выбрал AsyncTask, и я пытаюсь получить его, чтобы начать загрузку, а затем вызвать представление списка для RSS-канала. Оттуда я бы хотел, чтобы AsyncTask из другого действия передавал теперь проанализированную информацию новому действию представления списка по мере его загрузки. Я не могу понять, как передать ссылку на мой объект AsyncTask в мою новую деятельность, не реализовав parcelable и не добавив ее в пакет, что, я думаю, будет большим беспорядком. Есть ли лучший способ сделать это?

Я также видел, как другие люди рекомендуют запускать услугу. Каковы были бы преимущества делать это таким образом? Спасибо!

~ Скотт

Ответы [ 2 ]

9 голосов
/ 23 марта 2011

Это как раз тот случай, когда вы пользуетесь услугой.AsyncTask предназначен для выполнения задач в потоке пользовательского интерфейса (действительно, для удобства).

То, что вы делаете, должно продолжаться в службе, потому что вам не обязательно заботиться о потоке пользовательского интерфейса, поскольку вы не собираетесь отображаться в том же действии.

Вот как вам следует поступить следующим образом:

1) создать службу и выполнить обработку RSS-канала 2) внутри службы вы должны сохранить свойрезультаты в базе данных с ContentResolver 3) Пусть ваш ListAdapter в вашем ListActivity будет прослушивать изменения того же CONTENT_URI, который обновляет ваша служба.Это автоматически обновит ваш список при добавлении или удалении строк без каких-либо ANR, поскольку все они находятся в фоновом потоке

Некоторые другие преимущества состоят в том, что вы можете синхронизировать в фоновом режиме, не открывая вообще свой пользовательский интерфейс,Это может быть очень полезно для приложения RSS, так как вы не всегда хотите ждать, пока пользователь инициирует синхронизацию.

0 голосов
/ 03 июля 2014

Вызовите вашу асинхронную задачу, загрузите RSS-канал в статическом ArrayList и используйте этот arrayList для обновления первого действия с помощью пользовательского адаптера. Затем сделайте то же самое в других классах, где вам требуется этот RSS-канал.

...