首页 > 解决方案 > 从活动的 onCreate 中已运行的服务中获取数据

问题描述

假设服务“MyService”已经在运行,在启动活动“MyActivity”之前做一些工作,比如在后台复制文件。然后用户启动活动。当 MyActivity 启动时,如何检索在 MyService 中复制的文件以便我可以在 UI 中显示它?

我没有附上代码,因为我想要一个通用的答案。任务可以是任何东西,比如下载文件。我正在学习编码和试验服务。所以,我只是在服务中复制一堆大文件。

如果需要,我会发布代码。

标签: javaandroidandroid-service

解决方案


一个可能的解决方案是让服务公开一个 RxJava 总线(或类似的),它会在其中推送关于它正在做什么的更新。然后 Activity 将在 onResume 中订阅此总线并在 onPause 中取消订阅,并将根据总线上推送的内容显示信息。

您可以有一个总线,其中事件本身携带数据(如复制的百分比),或者您可以有多个总线,例如一个用于状态(空闲、复制、...),另一个用于状态详细信息(就像完成复制百分比的总线)。

各州可能的实施是

sealed class State {
    object Idle : State()
    class Copying(val percent: Float): State()
}

那么在您的服务中,您将拥有

val stateBus = BehaviorSubject.create<State>()

然后

stateBus.onNext(Copying(.5f))

推荐阅读