我是一名 android 初学者,只是在寻找一些关于应用程序架构的建议——特别是与使用 ViewModels 相关的建议。没有本地数据库,每个屏幕都会发出一个新的网络请求。我稍后会考虑实现房间或类似的东西。
主要活动(电影列表)
我有一个 100% 大小的回收视图显示电影列表的活动,recyclerview 中的每部电影都有一个封面图像,用户可以触摸该封面图像以导航到播放器视图。MainActivity(和它的回收器视图)由 ViewModel 支持。Movie 对象(由 LiveData 包装)具有您所期望的内容,例如标题、类别、封面图片、mp4 文件的 url。
private val movies = MutableLiveData<List<Movie>>()
为了转换到 PlayerActivity,intent 将所选电影的 ID 作为额外的字符串传递。
玩家活动
当 MainActivity 的回收器视图中的一个电影单元被选中时,我创建了一个新的意图来转换到播放电影的 PlayerActivity。这里也有一个带有电影封面图像的 imageView。此视图也由 ViewModel 支持。
private val selectedMovie = MutableLiveData<Movie>()
在 OnCreate() 中,我从意图中额外获取了 movie_id 字符串,并创建了 ViewModel(并且 ViewModel 使用 movie_id 执行网络请求)。这个视图还有一个按钮,当被触摸时,用户会跳转到一个 ScreenshotActivity。转换到 ScreenshotActivity 的意图也将 movie_id 作为额外的字符串传递。
截图活动
具有显示的电影屏幕截图的回收视图,当被触摸时,网络请求被发送回服务器以使用其中一个屏幕截图更新电影的封面图像。此活动从 PlayerActivity 意图中获取额外的 movie_id 来设置视图。
问题
- 每次进行网络请求显然是非常浪费的,我知道我应该使用类似空间之类的东西在本地缓存这些信息。在没有本地数据库的情况下,有没有更好的方法来做我上面用 ViewModels 做的事情?也许上面所有 3 个活动都可以访问一个视图模型?这样做,可以直接对电影对象进行更改并在所有视图中同步吗?关于如何做到这一点的任何好例子?
- 鉴于我当前用于 3x 活动的 3x ViewModels,当 ScreenshotActivity 中的屏幕截图更新时,如何通知 MainActivity 更新屏幕截图,并通知 PlayerActivity 更新封面图像(在播放器上)?