我有一个活动(ListActivity),其中如果用户点击一个按钮,我启动了一个“IntentService”的意图,基本上对Web服务进行REST调用并收集数据。 我的问题是,一旦服务完成,我填充活动中的项目列表,这只是一个静态变量。但是,我无法启动listadaptor,要求它在数据发生变化时刷新视图。有人能告诉我如何在IntentService完成任务后“通知”刷新的活动?Android IntentService提供数据回到活动
4
A
回答
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的语境。
希望有帮助!
如果您的IntentService处于不同的进程中,您仍然可以使用ResultReceiver吗?我的意图服务需要处于不同的过程中。如果我将我的ResultReceiver放入用于启动服务的Intent中,IntentService在解组Intent中的extras时抛出ClassNotFound异常。 – John 2017-03-23 16:28:45