繁体   English   中英

当应用程序被杀死时,如何最好地清除 Android ViewModel?

[英]How to best clear an Android ViewModel when the app is killed?

我目前正在覆盖ViewModel.onCleared()以清理我的 ViewModel 以防止任何泄漏(在这种情况下,从应用程序的内部存储中删除任何尚未使用的文件)。

当 ViewModel 的活动明确完成时,这完全正常。 但是由于onDestroy()在应用程序被onCleared()时不会被调用,所以onCleared()两者都不是。

我的意图(目前)不是保存任何数据,我只是不希望任何数据泄漏,无论是系统终止我的进程还是用户终止它。

什么工作

  1. 活动开始,用户拍照保存在应用程序的内部存储中。
  2. 用户离开活动而不保存。
  3. 活动被销毁并调用ViewModel.onCleared()删除未使用的图片。

什么不起作用(但可以通过使用Activity.onSaveInstanceState()解决

  1. 活动开始,用户拍照保存在应用程序的内部存储中。

  2. 无论出于何种原因,系统都会终止活动的进程。

  3. Activity.onDestroyViewModel.onCleared()都没有被调用。

什么也不起作用

  1. 活动开始,用户拍照保存在应用程序的内部存储中。

  2. 用户通过滑动杀死应用程序。

  3. Activity.onDestroyViewModel.onCleared()都没有被调用。

我担心我将不得不保留需要清理的文件名以解决第三种情况,但这感觉非常极端,我希望有一种更智能的方式使用生命周期方法。

我错过了什么吗?

如果我理解正确,您是否需要在活动中断时保存一些数据? 如果是这样,那么实现这一点的最佳方法是 onSaveInstanceState()。 在 ViewModel 中,可以方便地保存形成屏幕所需的所有数据。 它们会在屏幕旋转时存活,但会在应用程序被系统杀死时消失。

显然不可能确保在所有情况下都调用ViewModel.onCleared()

我通过首先将文件保存到缓存目录中并仅在确认需要它们时才将它们移动到我的图像目录来解决我的特定问题。 这样,如果发生一种边缘情况,仍然有一种方法可以清除缓存中的任何剩余文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM