Android IntentService возвращает данные в Activity - PullRequest
4 голосов
/ 16 апреля 2011

У меня есть действие (ListActivity), в котором, если пользователь нажимает кнопку, я запускаю намерение «IntentService», которое в основном выполняет REST-вызов веб-службы и собирает данные. Моя проблема заключается в том, что, как только служба завершена, я заполняю список элементов в Activity, который является просто статической переменной. Тем не менее, я испытываю затруднения при запуске listadaptor, чтобы попросить его обновить представление при изменении данных. Может кто-нибудь сказать мне, как я могу "уведомить" активность, чтобы обновить, поскольку IntentService выполнил свою задачу?

1 Ответ

9 голосов
/ 02 мая 2011

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

Пожалуйста, просмотрите эту презентацию для получения очень полезных рекомендаций:

http://www.youtube.com/watch?v=xHXn3Kg2IQE

EDIT: Что касается отправки результата назад, вы можете включить в ваше намерение пакет ResultReceiver, с которым вы запускаете IntentService, и уведомить об этом действие (и обработать обновление адаптера), используя .send ()

Что касается обновления ListAdapter, то это действительно зависит от того, какой тип вы используете. Если это простой адаптер, вы можете поменять его местами с помощью

getListView().setAdapter(adapter)

но вам будет намного лучше с CursorAdapter и простым вызовом

context.getContentResolver().notifyChange(uri, null);

Где контекст - это контекст вашего IntentService.

Надеюсь, это поможет!

...