android - 在活动和后台服务之间进行通信的最佳方式

Posted

技术标签:

【中文标题】android - 在活动和后台服务之间进行通信的最佳方式【英文标题】:android -best way to communicate between activity and background service 【发布时间】:2020-03-07 16:48:25 【问题描述】:

我正在尝试构建一个小型 MusicPlayer 以用于学习目的,但我对如何在后台进程和活动之间进行通信感到困惑。我还没有看过其他人的代码,但在我的(几乎是业余设计)中,活动和服务必须每秒相互更新,因为活动的控件应该反映在服务控件中(比如服务是否有 GUI android的通知栏)和音乐播放应该更新Activity的seekbar等。

实现服务的最佳方式是什么,以便它可以独立运行但与活动同步?

【问题讨论】:

【参考方案1】:

我按照以下说明进行操作: https://developer.android.com/guide/components/bound-services

绑定服务是服务类的实现,它允许其他应用程序绑定到它并与之交互。要为服务提供绑定,您必须实现 onBind() 回调方法。此方法返回一个 IBinder 对象,该对象定义了客户端可用于与服务交互的编程接口。

基本上你实现你的服务和你的活动,然后当活动恢复时,它可以绑定服务,以便它们可以通信。

在同一个页面中,您可以找到一些关于它是如何在 java 和 kotlin 中完成的代码。

【讨论】:

您可以将服务与多个活动绑定吗?并且销毁应用时不绑定服务结束? 在我的情况下,我只需要将控制硬件加速器的服务绑定到一个活动,但我很确定您可以将它绑定到许多活动,我不明白为什么不这样做。您可以离开被破坏的活动并返回它并再次绑定。并且服务继续独立于活动运行,我很确定这一点,因为我必须这样做,但它必须是前台服务,并且它可以随时被系统杀死(警报是唤醒它的好方法)万一发生这种情况) 所有活动都只是在单个进程中运行的类,对吗?然而,为什么您在文档中链接的页面说“绑定服务是客户端-服务器接口中的服务器。它允许组件(例如活动)绑定到服务,发送请求,接收响应并执行 进程间通信 (IPC)"? 我想这是因为在该场景中服务将充当服务器,而活动将充当客户端(请求数据或操作并接收来自服务的反馈)。还有其他通信方式,但您所描述的可以通过有界服务来完成。试试看 嗯...如果您每秒更新一次,搜索栏可能会滞后

以上是关于android - 在活动和后台服务之间进行通信的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

活动/服务和小部件提供者之间的通信?

与服务中的活动(LocalService)进行通信 - Android最佳实践

开发两个 android 应用程序并在两个应用程序之间进行通信

Activity 和 Service 之间的通信

Android中的线程或服务中的蓝牙通信?

与来自服务的活动(LocalService)通信 - Android 最佳实践