从活动的onCreate中的已运行服务中获取数据

问题描述 投票:1回答:1

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

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

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

java android android-service
1个回答
0
投票

一个可能的解决方案是让服务公开一个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))
© www.soinside.com 2019 - 2024. All rights reserved.