我正在使用 Android Studio 在 Jetpack Composable 平台上编写一个 Android 应用程序。我需要在平板电脑中安装的 SD 卡上读取和写入文件。我可以如下定义卡的路径:
private val externalStorageVolumes = context.let { ContextCompat.getExternalFilesDirs(it.applicationContext, null) }
private val sdCardStorage = externalStorageVolumes[1]
问题是:我想从视图的 ViewModel 访问该卡,但正如您所看到的,我需要传递对上下文的引用。显然,不应从 ViewModel 引用任何上下文,因为这可能导致内存泄漏。
有什么方法可以从不需要上下文的 ViewModel 读取和写入 SD 卡吗?谢谢!
显然不应从 ViewModel 引用任何上下文,因为这可能导致内存泄漏
AndroidViewModel
的用途。它介导对 Application
的访问,这是一个可以从 Context
安全使用的单例 ViewModel
。
更好的是让您的数据存储逻辑由单例存储库类管理,作为分层架构的一部分。您可以让存储库通过依赖反转(Dagger/Hilt、Koin 等)访问
Application
单例。