2011-04-16 56 views
4

我有一个活动(ListActivity),其中如果用户点击一个按钮,我启动了一个“IntentService”的意图,基本上对Web服务进行REST调用并收集数据。 我的问题是,一旦服务完成,我填充活动中的项目列表,这只是一个静态变量。但是,我无法启动listadaptor,要求它在数据发生变化时刷新视图。有人能告诉我如何在IntentService完成任务后“通知”刷新的活动?Android IntentService提供数据回到活动

回答

9

如果您正在进行REST调用,我会建议您使用IntentService而不是AsyncTask。 AsyncTask看起来不错而且有用,但它需要非常小心,不要泄漏上下文并将结果返回到可能早已离开的Activity,这使得它不易正确使用。

敬请收看呈现非常有益的指导方针:

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

编辑: 至于发回的结果,您可以在您的意图parcelable ResultReceiver你先从IntentService,并通知活动(并在那里处理适配器刷新)使用.send()

至于刷新ListAdapter,它真的取决于您使用的是哪种类型。如果它是一个简单的适配器,可以将其交换使用

getListView().setAdapter(adapter) 

但你会与CursorAdapter好得多,只是要求

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

如果背景是你的IntentService的语境。

希望有帮助!

+0

如果您的IntentService处于不同的进程中,您仍然可以使用ResultReceiver吗?我的意图服务需要处于不同的过程中。如果我将我的ResultReceiver放入用于启动服务的Intent中,IntentService在解组Intent中的extras时抛出ClassNotFound异常。 – John 2017-03-23 16:28:45