gpt4 book ai didi

android - 通过调用 startService 向服务发送消息

转载 作者:搜寻专家 更新时间:2023-11-01 08:07:50 27 4
gpt4 key购买 nike

我已经创建了一个服务,我正在使用 bindService 函数通过我的 Activity 访问它,但我想在我的 Activity 退出后继续运行我的服务。

为此,我必须使用 startService,但之前我使用的是 bindServiceServiceConnection,我将消息发送到handler(在服务中)一旦 onServiceConnected 被调用。

但我不知道如何使用 startService 发送消息,因为我没有像 onServiceConnected 这样的地方可以将消息发送到处理程序。

注意:我想继续运行我的服务,即使我不在我的应用程序中,因为我正在从我的服务更新小部件。

所以一个服务有两个角色

  1. 更新 Activity 中的textview
  2. 一旦 Activity 退出,服务将更新小部件

最佳答案

您有 3 个选项可以与您的服务进行通信:

  • 将额外的内容添加到 Intent 中并调用 startService。你可以称它为几次,即使服务已经在运行
  • 创建 Messenger 并使用它与服务通信
  • 使用绑定(bind)服务

请务必在您的服务中使用 START_STICKY,以便它在 Activity 结束后继续运行,并使用 startForeground() 显示通知,否则您的服务将被 SO 终止一段时间后(平均 30 分钟到 1 小时)。

开始流程:

  • ClientActivity (CA) 启动该服务并将 CA Messenger 地址作为 intent 中的附加项发送到该服务。
  • 在服务启动时,它将服务 Messenger 地址发送回CA(使用 CA Messenger 地址发送消息)。
  • 最后,服务返回 START_STICKY。

有了这两者,客户端和服务器将知道彼此的 Messenger 地址并且不需要绑定(bind)。

停止服务:

要停止服务,请在您的 Activity 中使用以下命令:

stopService(new Intent(ActivityClass.this, ServiceClass.class)); 

重新连接:

如果您离开客户端 Activity (CA) 并希望在应用重新启动时重新连接到服务,您有两种选择:

- 从您的 CA 再次调用 startService。这将再次调用服务中的 onStartCommand。只有当服务尚未运行时,服务 onCreate() 才会被调用。您可以使用上述启动流程来获取服务 Messenger;

-您可以使 Messenger 服务成为公共(public)和静态 public static Messenger mMsgService = null;。因此,当您的 CA 启动时,它可以检查服务信使是否已初始化(不为空)并使用它与服务进行通信。当服务停止时,需要设置mMsgService = null;

祝你好运。

关于android - 通过调用 startService 向服务发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12797633/

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