活动之间的数据传输。带参数的 Kotlin 单例?其他问题

Data Transfer betwen activities. Kotlin Singleton with Parameters? Other questions

5-200 个对象(取决于 App 用户)的 list/set 具有五个 40 个字符的 String 变量需要在活动之间通用。

ViewModels 适用于 Fragment 之间的数据传输,但似乎不适合 Activity 之间的数据传输,因为 ViewModel 的生命周期仅限于单个 activity 的生命周期。

问题 1:是否可以制作整个应用程序 - 而不是单个 Activity- ViewModelStoreOwner?如果是如何?您会推荐 ViewModelSingleton 吗?

问题2:用普通单例代替怎么样?与 ViewModel 和 ViewModelSingleton 相比有何优缺点?是否有可能将单例发送到垃圾收集器并丢失数据?

问题3: object在Kotlin中定义了一个线程安全的惰性实例化单例,很赞,但是不能直接传参。传入参数的方法多种多样。你建议什么方法,为什么?

问题4:使用sharedPreferences传递数据也是可以的,但是好像比较慢。除了目前提到的方法之外,您还有什么建议的快速、稳健和灵活的方法吗?

谢谢。

如果您的数据和您的一样小,并且在整个应用程序中使用,单例对我来说很有意义。但不是 "ViewModel" 单身人士。您的模型 class 应该是单例,而不是 ViewModel,它包含使用模型数据的逻辑并且应该限定在 Activity 范围内(并且为每个 Activity 创建一个新实例).

您的单例模型可以是传统的单例,也可以是具有必须调用的初始化函数的 object。那只是偏好。只有与单例一起使用的 ViewModel 才能访问它,因此无论哪种方式,样板的使用都可能大致相同。

有时,Android 中的单例需要一个上下文,例如您要保存到文件或数据库。在那种情况下,Application 应该用于 Context,所以你不会不小心将 Activity 传递到 View/ViewModel 屏障并泄漏它。您可以使用 AndroidViewModel,这样您的 ViewModel 就会有一个 Application 实例,它可以用来检索单例。

SharedPreferences 也可以工作,而且通常不会很慢,因为它将数据保存在内存中并在后台将其保存到文件中。但是你正在做不必要的文件写入。