在 Android 中使用 MVVM 架构在哪里存储/管理会话和全局/无状态数据?

BVt*_*Vtp 14 singleton android mvvm android-livedata

两种情况:

1. Session data - For example the logged in User details, or some other session data.
2. Global/stateless data - A repository with retrofit client. 
Run Code Online (Sandbox Code Playgroud)

对于情况 1:最简单的方法是使用某种单例 "DataManager/LoginManger" ,但单例很糟糕(测试,随着时间的推移状态不可预测......)另一种方法是使用 Application 类,这也是坏的。

那么我们在哪里存储这些数据呢?

对于案例 2:一个简单的存储库,其中包含对 Retrofit 客户端或其他客户端的引用。
使用它作为单例更有意义,因为这个类是不可变的/无状态的。我们只想创建一次改造客户端。但是.. 测试?

3 . 另外,如果我们想获取 location 怎么办?我们可以在 ViewModel 中使用 LiveData 来负责。但是 ViewModel 的范围是某个视图/活动。所以这意味着如果我们更改视图(例如从抽屉中输入设置,而主页的视图模型正在获取位置),一旦检索到位置数据,我们将丢失位置数据,然后当用户返回主页时,我们不仅要向他们显示位置,还必须重新请求位置。

我还没有找到任何方式来处理所有这些情况。似乎没有明确的答案。