我正在实施一项服务,该服务将在MainActivity启动时启动。该服务检查并维护网络连接。
我没有将服务绑定到Activity,因为即使活动不可用,我也希望服务继续运行。服务将从与其连接的服务器接收消息。
当服务收到消息时,我很难选择最佳逻辑来执行以下操作。
检查MainActivity当前是否已打开且位于用户面前
如果调用活动中的某些方法与UI进行交互
如果没有活动更新通知。
我的问题是;
如何从我的服务中正确检查活动是否在UI中运行?我知道我可以绑定服务,但如果活动关闭,我不想解除绑定。这会有问题吗?
我将以某种方式需要从服务向活动发送消息。鉴于上述情况,最好的方法是什么?
答案 0 :(得分:2)
以不同的方式做。
如果您的服务不在与您的活动分开的进程中运行,那么您的服务可以通过子查询Application
对象提供同步(多线程安全)消息列表,您的活动可以在其中查看它了。但是,如果轮询发生在某些其他事件上,这只会是最好的。
如果您希望将消息“推送”到您的活动,您的活动应该在发现它运行时注册您的服务,而不是相反。在这种情况下,您的Activity应该实现一个接口,通过该接口,服务可以以线程安全的方式通知您的活动新消息。
当然,您也可以直截了当地发布打开活动的通知,但据我所知,您希望提供更顺畅的集成。
答案 1 :(得分:0)
一个想法是让您的服务在新的更新可用时发送状态栏通知
实施通知,以便在点击时打开MainActivity
。
然后,当用户点击通知时,如果MainActivity
已经运行,那么它将被带到前面,否则它将被启动。
所以这基本上不需要检查用户面前当前是否打开MainActivity
(我认为这是一种不好的做法)。