IntentService如何将结果返回Activity?

eggcalm 2011-08-01 06:11:00
最近想在Context.startService(intent)的时候在intent中放一个callback,众所周知,Intent中只能put一些原始类型的数据,比如int、boolean、string,除此之外还可以put一些实现了Parcelable或者Serializable接口的类的实例,所以,我要想在intent中put一个自定义的callback接口实例,必须要满足以上条件,这我认了,问题是,继承Parcelable接口很无聊很繁琐有木有!!!继承Serializable接口啥事都可以不干,但是创建它的实例时特别麻烦,使用new Callback(){}这样动态地创建一个内部类对象,你会发现等到真正Serialize的时候(运行时)会报错,崩溃。。。

我想问,在自己的Activity里start自己程序中的Service算IPC吗?压根就不算吧!算RPC吗?压根就不算吧!为什么非得让我传能够序列化的数据啊!想不通。

回到主题,IntentService如何将结果返回Activity?我上文要start的Service其实是一个IntentService,这个IntentService在处理完网络请求后需要将复杂的结果返回给Activity,本来是打算用Callback的形式直接将结果返回的,看来是不行了,如果用ResultReceiver好像返回的数据必须要实现Parcelable接口,太麻烦了,谁有好办法?
...全文
617 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hvk687 2012-07-16
  • 打赏
  • 举报
回复
算是localservice,只要你绑定了之后,就可以在绑定的时候,把service.this饭后,你就可以直接操作service了。因为他们在同一个进程空间中
carrera007 2012-07-16
  • 打赏
  • 举报
回复
Handler
丁子 2012-07-16
  • 打赏
  • 举报
回复
IntentService如何将结果返回Activity,是不能通过Callback来实现的,这里提供给你三种可选的方法。
第一:通过Service的IBind返回数据绑定。你需要在Activity中其中实现ServiceConnection并且对此Service进行绑定bindService( intent , serviceConnection , Context.BIND_AUTO_CREATE );
第二:可以在Service发送一个绑定了数据的BroadCast,在Activity中实现接收该BroadCast的BroadCastReceiver。
第三:通过Messager及Handler机制传送绑定了数据的Message。

以上三种方式各有优缺点,建议你采用第三种方式。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧