Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 关于服务、活动和通知之间交互的建议_Android_Service_Android Activity - Fatal编程技术网

Android 关于服务、活动和通知之间交互的建议

Android 关于服务、活动和通知之间交互的建议,android,service,android-activity,Android,Service,Android Activity,我正在实现一个服务,它将在MainActivity启动时启动。此服务检查并维护网络连接 我没有将服务绑定到活动,因为我希望即使活动不可用,服务也能继续运行。该服务将从其连接的服务器接收消息 当服务接收到消息时,我正在努力选择最好的逻辑来执行以下操作 检查MainActivity当前是否打开并在用户面前 如果需要,则调用活动中的某些方法与UI交互 如果没有活动更新,则通知为 我的问题是, 如何从我的服务正确检查活动是否在UI中运行?我知道我可以绑定服务,但如果活动已关闭,我不想解除绑定。那会是个问

我正在实现一个服务,它将在MainActivity启动时启动。此服务检查并维护网络连接

我没有将服务绑定到活动,因为我希望即使活动不可用,服务也能继续运行。该服务将从其连接的服务器接收消息

当服务接收到消息时,我正在努力选择最好的逻辑来执行以下操作

检查MainActivity当前是否打开并在用户面前

如果需要,则调用活动中的某些方法与UI交互

如果没有活动更新,则通知为

我的问题是,

如何从我的服务正确检查活动是否在UI中运行?我知道我可以绑定服务,但如果活动已关闭,我不想解除绑定。那会是个问题吗


我需要以某种方式将消息从服务发送到活动。鉴于上述情况,最好的方法是什么?

一个想法是,当有新的更新可用时,让您的服务发送状态栏通知。
执行通知,以便在单击时打开
MainActivity

然后,当用户单击通知时,如果
main活动
已在运行,则它将被置于最前面,否则它将被启动。
因此,这基本上消除了检查
MainActivity
当前是否在用户面前打开的需要(我认为这是一种不好的做法)。

以不同的方式进行操作

  • 如果您的服务与活动不在单独的进程中运行,那么您的服务可以通过子LSED
    Application
    对象提供同步(多线程安全)消息列表,在该列表中,您的活动可以在其中查找它。但是,只有在对某些其他事件进行轮询时,这才是最好的

  • 如果您想将消息“推送”到您的活动中,那么您的活动应该在发现它运行时向您的服务注册,而不是反过来注册。在此场景中,您的活动应该实现一个接口,通过该接口,服务可以以线程安全的方式通知您的活动新消息


当然,您也可以直接发布打开活动的通知,但据我所知,您希望提供更平滑的集成。

嘿,安迪,谢谢您的回复。这是一个合理的方法,但是它不适合应用程序的工作方式。类,这似乎是一个很好的方法,尤其是你的第二点。但是,我似乎仍然需要对服务中的活动的引用(以便调用接口方法)。您能告诉我如何获取一个以及如何检查活动是否打开的线索吗?@Stephen您的服务和活动都可以通过
activity.getApplication()
Service.getApplication()访问您的子类应用程序对象。你输入结果。然后,您的服务向应用程序对象“注册”(/存储对自身的引用。然后,应用程序对象为活动提供方法,告诉服务它们在那里或离开了。出于安全原因,我将在
onResume()`和
onPause()
中调用这些方法(也称为空指针避免)。然后,您的服务可以访问应用程序的活动。这同时保证您的活动当前处于顶部。