java - 从活动的 onCreate 中已运行的服务中获取数据
问题描述
假设服务“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))
推荐阅读
- python - python中的嵌套字典
- javascript - 从 NodeJS 中获取的子详细信息中遍历和构建 Tree
- firebase - Flutter Future:构建函数返回 null
- spring - 如何使用 spring-boot 为 Ldap 创建多个配置
- orm - 构建数据访问层
- flask - flask-admin:美化 json 字段
- javascript - 是否可以为 location.reload() 添加 javascript for/while 循环;
- html - 为什么网站渲染后会自动调用onclick函数-Flask?
- html - 兄弟按钮缩小和增长
- amazon-web-services - AWS Elasticache redis 突然变慢