gpt4 book ai didi

android - 需要获得服务才能回话 Activity

转载 作者:太空宇宙 更新时间:2023-11-03 11:35:53 25 4
gpt4 key购买 nike

我需要创建一个 Activity 来启动监视用户位置的服务,并在特定区域内允许调用 Activity 更新其 View 以通知用户。

由于有几种不同的方式来处理服务,我有点困惑,不知道哪种方式适合我的情况。

使用 startService()stopService() 方法:据我了解,我无法直接返回开始 Activity .在谷歌文档中有一个 example 显示如何通过 PendingIntent 将 BroadcastReceiver 传递给服务并调用它,但我认为这不允许我更新正在运行的 Activity 的 View ......或者会吗?

绑定(bind)服务:从文档看来,这将允许服务和 Activity 之间进行双向通信,但也提到绑定(bind)服务不在后台运行 indefinitely 。现在我不需要,甚至不希望服务无限期地运行,但在最坏的情况下,我可能需要它在 bg 中运行至少一两个小时而不会被杀死。

第三个(可能不太好)选项:在 Activity 的线程中运行位置服务,这将使实时 View 更新变得容易,然后在 onPause 事件中停止位置服务在 Activity 中并通过 startService() 将其传递给服务,并在进入定义区域时使用通知服务提醒用户。

如有任何建议,我们将不胜感激。

  1. this

    if you want the service to send a result back, then the client that starts the service can create a PendingIntent for a broadcast (with getBroadcast()) and deliver it to the service in the Intent that starts the service. The service can then use the broadcast to deliver a result.

  2. this

    A bound service typically lives only while it serves another application component and does not run in the background indefinitely.

最佳答案

您可以拥有一个服务,该服务既是绑定(bind)的又是通过 startService() 启动的。使用 ServiceConnection 可以进行两种方式的通信,使用 startService()/stopService() 可以控制它的生命周期。

来自 android 站点的生命周期图像很好地解释了它: Lifecycle

通过绑定(bind)和启动服务,您将获得可以无限期运行的服务。只有满足以下两个条件时,服务才会停止:

  1. 没有客户端绑定(bind)到它。
  2. 调用了 stopService()。

它需要更多的维护,但我发现这是最合理的选择。

关于android - 需要获得服务才能回话 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6366745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com