Android-活动和服务可以使用Observer设计模式或类似模式进行通信吗?

Android-活动和服务可以使用Observer设计模式或类似模式进行通信吗?,android,android-service,observer-pattern,Android,Android Service,Observer Pattern,是否可以使用观察者设计模式使活动和服务进行通信? 我想让他们以观察者和通知者的身份进行双向沟通 我之所以要这样做,是因为我希望它们之间的耦合度低。因此,如果活动因某种原因崩溃,服务仍将运行,并且仍在尝试通知GUI而不会崩溃。 我希望该服务保持运行的原因是,它就像局域网中的服务器一样,我仍然希望系统和客户机能够通信,即使服务器的GUI不存在 如果使用观察者模式无法实现或过于复杂,是否有其他方法来实现我上面描述的内容 提前感谢您可以使用常用活页夹从活动到服务进行沟通。服务可以通过回调通知活动有关更改

是否可以使用观察者设计模式使活动和服务进行通信? 我想让他们以观察者和通知者的身份进行双向沟通 我之所以要这样做,是因为我希望它们之间的耦合度低。因此,如果活动因某种原因崩溃,服务仍将运行,并且仍在尝试通知GUI而不会崩溃。 我希望该服务保持运行的原因是,它就像局域网中的服务器一样,我仍然希望系统和客户机能够通信,即使服务器的GUI不存在

如果使用观察者模式无法实现或过于复杂,是否有其他方法来实现我上面描述的内容


提前感谢

您可以使用常用活页夹从活动到服务进行沟通。服务可以通过回调通知活动有关更改的信息,您可以在OnServiceConnection()中注册回调,也可以在Activities onPause()中注销回调


有了它,您就可以在服务和活动之间进行双向通信,实现也就不那么复杂了。

如果您正在使用通知,您可以将服务作为前台运行。因此,当活动退出时,服务可以使用通知或远程视图进行更新

此外,在启动活动时,可以从活动绑定服务,以使用服务连接进行通信

         bindService(new Intent(this,
            YourService.class), mConnection, Context.BIND_AUTO_CREATE);
已启动的服务可以使用startForeground(int,Notification)API将服务置于前台状态,系统将其视为用户主动意识到的内容,因此在内存不足时不可能终止。(理论上,在当前前台应用程序的极端内存压力下,服务仍有可能被终止,但在实践中,这不应引起关注。)

检查链接-

因此,如果活动因某种原因崩溃,服务仍将运行

问题是,活动不会崩溃。整个应用程序过程都是如此。因此,如果您想分离活动和服务,您需要在不同的进程中运行它们。但请注意,是否在进程崩溃后重新启动服务。 看看这里,这对你来说是个好的开始

如果使用观察者模式无法实现或过于复杂

按照建议,使用活页夹。或者你可以用意图来交流


但请记住,这项服务并不是用来作为你的应用程序永远运行的一部分。尽量避免这种情况。使用服务进行后台操作

如果进程被终止怎么办?服务还在运行吗?startForeground听起来是一个可行的解决方案。不过,我还有一些其他问题:如果应用程序崩溃/关闭(此时服务仍在运行),并且应用程序重新打开,那么即使对服务的引用(活页夹等)消失,是否可以与正在运行的服务保持通信?或者可以以某种方式保留此引用吗?您必须使用服务连接从活动绑定到服务。检查我的最新答案啊,我明白了!:)即使已被活动绑定,也可以执行此操作?是:),您现在都准备好了吗?阅读答案中的链接。它提供了关于服务如何在有/无活动的情况下工作的良好信息。是的,我想我很乐意去,非常感谢!)我接受你的回答