您有 3 个选项与您的服务进行通信:
- 为意图添加额外内容并调用 startService。您可以多次调用它,即使该服务已经在运行
- 创建一个 Messenger 并使用它与服务进行通信
- 使用绑定服务
请务必START_STICKY
在您的服务中使用,以便在活动完成后继续运行,并startForeground()
显示通知,否则您的服务将在一段时间后(平均为 30 分钟到 1 小时)被 SO 杀死。
起始流程:
- ClientActivity (CA) 启动服务并将 CA Messenger 地址作为 Intent 中的额外地址发送给服务。
- 在服务启动时,它将服务信使地址发送回 CA(使用 CA 信使地址发送消息)。
- 最后,服务返回 START_STICKY。
有了这个,客户端和服务器就可以知道对方的 Messenger 地址,并且不需要绑定。
停止服务:
要停止服务,请在您的活动中使用以下内容:
stopService(new Intent(ActivityClass.this, ServiceClass.class));
重新连接:
如果您离开客户端活动 (CA) 并希望在重新启动应用程序时重新连接到服务,您有两种选择:
-再次从您的 CA 调用 startService。这将再次调用onStartCommand
服务中的。仅当服务onCreate()
尚未运行时才调用该服务。您可以使用上述启动流程来获取服务 Messenger;
- 您可以将服务 Messenger 设为 public 和 static public static Messenger mMsgService = null;
。因此,当您的 CA 启动时,它可以检查服务信使是否已初始化(不为空)并使用它与服务进行通信。当设置停止时,需要设置mMsgService = null;
祝你好运。