最近想在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接口,太麻烦了,谁有好办法?

解决方案 »

  1.   

    算是localservice,只要你绑定了之后,就可以在绑定的时候,把service.this饭后,你就可以直接操作service了。因为他们在同一个进程空间中
      

  2.   

    IntentService如何将结果返回Activity,是不能通过Callback来实现的,这里提供给你三种可选的方法。
    第一:通过Service的IBind返回数据绑定。你需要在Activity中其中实现ServiceConnection并且对此Service进行绑定bindService( intent , serviceConnection , Context.BIND_AUTO_CREATE ); 
    第二:可以在Service发送一个绑定了数据的BroadCast,在Activity中实现接收该BroadCast的BroadCastReceiver。
    第三:通过Messager及Handler机制传送绑定了数据的Message。以上三种方式各有优缺点,建议你采用第三种方式。