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

时间:2019-04-26 21:06:42

标签: java android android-service

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

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

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

1 个答案:

答案 0 :(得分:0)

对此的一种可能的解决方案是使服务公开RxJava总线(或类似的总线),并在该总线上推送其正在执行的更新。然后,活动将在onResume中订阅此总线,并在onPause中取消订阅,并将基于总线上推送的内容显示信息。

您可能只有一条总线,事件本身承载数据(如复制百分比),或者您可能有多条总线,例如,一条总线用于状态(空闲,复制等),而另一条总线用于详细信息状态(例如复制完成百分比的总线)。

国家可能的实现方式是

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

然后您将在您的服务中拥有

val stateBus = BehaviorSubject.create<State>()

然后

stateBus.onNext(Copying(.5f))