Android IntentService向Activity提供数据

4
我有一个活动(ListActivity),如果用户点击按钮,我会启动一个意图到“IntentService”,该服务基本上对Web服务进行REST调用并收集数据。 我的问题是,一旦服务完成,我就会在活动中填充项目列表,这只是一个静态变量。然而,我遇到了麻烦,无法启动listadaptor来要求它刷新视图,因为数据已更改。有人可以告诉我如何“通知”活动,在IntentService完成任务后刷新吗?
1个回答

9
如果您正在进行REST调用,我建议您使用IntentService而不是AsyncTask。AsyncTask看起来很好用,但需要非常小心才能避免泄漏上下文并将结果返回给可能已经不存在的Activity,这使得它不那么容易正确使用。
请观看此演示文稿以获取非常有用的指导:

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

编辑: 关于发送结果,您可以在使用IntentService启动Intent时包含可包裹的ResultReceiver,并使用.send()通知Activity(并在那里处理适配器刷新)。

至于刷新ListAdapter,这实际上取决于您使用的是哪种类型。如果它是一个简单的适配器,您可以使用交换它的方式来进行刷新。

getListView().setAdapter(adapter)

但是你使用CursorAdapter会更好,只需调用它即可。

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

其中,context是您的IntentService的上下文。

希望这有所帮助!


如果您的IntentService在不同的进程中,您仍然可以使用ResultReceiver吗?我的IntentService需要在不同的进程中运行。如果我将ResultReceiver放在用于启动服务的Intent中,当反序列化Intent中的额外信息时,IntentService会抛出ClassNotFound异常。 - John Weidner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接