从 Android 中的 Unbound Service 获取数据

Posted

技术标签:

【中文标题】从 Android 中的 Unbound Service 获取数据【英文标题】:Getting data from an Unbound Service in Android 【发布时间】:2011-04-08 15:27:54 【问题描述】:

我目前有一个未绑定的服务正在运行,它不断地抓取我在启动时启动的 gps 位置。然后我有一个应用程序,它可以通过从服务中提取数据来绘制我去过的地方。

我无法绑定服务来与之对话,否则一旦我关闭应用程序就会被销毁。

有没有什么好的方法可以从未绑定的服务中获取数据,或者在我取消绑定后防止绑定的服务死亡?

干杯! :)

【问题讨论】:

【参考方案1】:

有一种解决方法可以让您的服务保持活力。通过调用 startService 调用您的服务,然后绑定到该服务。这样,您的活动就可以维护服务的生命周期。

【讨论】:

如果您只想从服务中获取数据,那么共享首选项应该会有所帮助。它甚至比回调函数更好。只需将新的 gps 位置放在您的共享服务中,活动就可以在需要时查看它。 我会调查的。谢谢! :) 实际上,使用共享首选项在活动和服务之间进行通信并不是最好的主意。这不是偏好要做的事情。而且至少有一个问题值得思考:如何触发活动以检查首选项中的新数据?每X秒?这不是一个好的解决方案。从服务发送广播并在活动中注册广播接收器(并在其中更新 UI)是更好的方法。【参考方案2】:

正如documentation 所说:

服务既可以启动也可以拥有 绑定到它的连接。在这样一个 情况下,系统会保留服务 运行只要它是 开始或有一个或多个 连接

首先,使用startService() 启动服务,然后在 onResume() 中绑定到它,并在 onPause() 中取消绑定。该服务将继续运行,因为它已启动。当您想停止服务时,可以从服务中调用stopSelf(),或者从活动中调用stopService()。如果有任何连接,它将立即停止,或者在您解除绑定后立即停止。

【讨论】:

您的意思是,如果我创建了一个有界服务但通过调用 startService() 来调用它,那么如果我不调用 stopService() 或 stopSelf(),即使在 onDestroy() 之后该服务仍将继续运行..我的理解正确吗? activity组件销毁时这个服务不会停止吗?

以上是关于从 Android 中的 Unbound Service 获取数据的主要内容,如果未能解决你的问题,请参考以下文章

Unbound Datagridviewcomboboxcolumn值是否区分大小写?

在 Signal 和 Slot 之间传递参数时的 PyQt Unbound 方法

Macvlan 上的 Pi-hole + Unbound (native. install):如何配置 Unbound 以使用 macvlan 接口?

unbound搭建递归dns

Dynamics CRM 2015/2016 Web API:Unbound Function 和 Bound Function

unbound dns安装手记