假设一个服务'MyService'已经在运行,做一些工作,比如在活动之前复制文件,在启动'MyActivity'之前。然后用户启动活动。如何在MyActivity启动时检索MyService中正在复制的文件,以便我可以在UI中显示它?
我没有附加代码,因为我想要一个通用的答案。任务可以是任何事情,例如下载文件。我正在学习编码和实验服务。所以,我只是在服务中复制一堆大文件。
如果需要,我会发布代码。
一个可能的解决方案是让服务公开一个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))