最佳答案
我正在编写我的第一个Android应用程序,试图弄清楚服务和活动之间的通信。我有一个服务,将在后台运行,并做一些gps和基于时间的日志记录。我将有一个活动,将用于启动和停止服务。
因此,首先,我需要能够确定当活动启动时服务是否正在运行。这里还有一些其他的问题,所以我想我可以解决(但请随意提供建议)。
我真正的问题是:如果活动正在运行,服务已经启动,我需要一种方法让服务向活动发送消息。简单的字符串和整数在这一点上-状态消息。消息不会定期发生,所以我认为如果有其他方法,轮询服务不是一个好方法。我只想在用户启动活动时进行此通信-我不想从服务启动活动。换句话说,如果您启动了Activity并且服务正在运行,当一些有趣的事情发生时,您将在Activity UI中看到一些状态消息。如果您不启动Activity,您将看不到这些消息(它们不是那么有趣)。
似乎我应该能够确定服务是否正在运行,如果是的话,将活动添加为侦听器。然后在Activity暂停或停止时删除Activity作为监听器。这真的可能吗?我能想出的唯一方法是让活动实现Parcelable并构建一个AIDL文件,这样我就可以通过服务的远程接口传递它。这似乎是多余的,但我不知道活动应该如何实现writeToParcel() / readFromParcel()。
有没有更简单或更好的方法?谢谢你的帮助。
编辑:
对于稍后对此感兴趣的人来说,在示例目录:/apis/app/RemoteService.java中有来自谷歌的通过AIDL处理此问题的示例代码