首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在活动、片段和服务之间共享相同数据实例的最佳方式是什么?

在活动、片段和服务之间共享相同数据实例的最佳方式是什么?
EN

Stack Overflow用户
提问于 2020-08-07 15:51:25
回答 1查看 93关注 0票数 0

我是一个业余的android开发人员,我制作了一个音乐播放器应用程序,我需要有相同的对象实例(歌对象)在我的活动,片段和服务,他们都有能力操纵对象的状态。用户可以播放/暂停/下一首/上一首歌曲,如果歌曲暂停或播放,所有用户都需要显示相同的当前歌曲信息和歌曲状态。

我的活动可以通过在所有片段上持久化的底部布局来更改歌曲状态。我的片段可以通过播放列表页面选择/暂停歌曲来更改歌曲状态。我的服务可以通过通知栏暂停/继续/下一步/上一首歌曲来更改歌曲状态。

我想不出在哪里以及如何存储对象实例的解决方案。我想让它们都有一个Song对象实例,并通过发送广播来更新值,但我不认为这是最好的解决方案,而且看起来相当马虎。

还从服务器检索要播放的歌曲URL。哪里是进行API调用的最佳位置?

如果有人能就如何做到这一点提出更好的方法,我们将不胜感激。谢谢!

致以敬意,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-07 16:11:30

您可以创建一个具有activity作用域的ViewModel,它将在片段/活动/服务之间共享。

代码语言:javascript
复制
class AudioPlayerViewModel: ViewModel {
    val songLiveData = MutableLiveData<Song>()
    
    fun playSong() {
        // Todo your logic
    }
    
    fun stopSong() {
        // Todo your logic
    }
    
    .
    .
    .
}

您对歌曲所做的每个更改都将通过ViewModel完成,片段/活动/服务将观察到songLiveData中发生的更改,并相应地更新UI。

至于网络请求,我建议您看看改进库。一种常见的做法是使用存储库模式,该模式将保存所有网络和DB调用,然后您可以在ViewModel中获取存储库的一个实例并执行该网络调用。您可以使用协程或RxJava来处理线程。

总结一下:

活动/片段/视图/服务...

负责与ViewModels中观察到的数据进行UI交互,并根据这些数据进行UI更改。

ViewModel

在网络层和用户看到的内容之间承担交互角色的责任。他们修改数据,这样UI就可以保持静默,不包含任何逻辑。

存储库

负责API和DB的调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63297527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档