如何在应用程序被终止时最好地清除 Android ViewModel?

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

我目前正在覆盖 ViewModel.onCleared() 以清理我的 ViewModel 以防止任何泄漏(在本例中是从应用程序的内部存储中删除任何未使用的文件)。

当 ViewModel 的 activity 显式完成时,这完全正常。但是由于应用程序被杀死时 onDestroy() 没有被调用 onCleared() 两者都没有。

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

什么有效

  1. activity启动,用户拍照保存 在应用程序的内部存储中。
  2. 用户没有离开 activity 节省。
  3. activity被破坏,ViewModel.onCleared()被破坏 删除未使用的图片。

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

来解决
  1. activity启动,用户拍照保存 在应用程序的内部存储中。

  2. activity的进程不知为何被系统杀死了

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

什么也不行

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

  2. 用户滑动关闭应用

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

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

我是不是漏掉了什么?

如果我没理解错的话,activity中断的时候需要保存一些数据吗?如果是这样,那么最好的实现方式就是onSaveInstanceState()。在 ViewModel 中,保留构成屏幕所需的所有数据很方便。它们会在屏幕旋转时存活,但会在应用程序被系统杀死时消亡。

显然无法确保在所有情况下都调用 ViewModel.onCleared()

我解决了我的具体问题,首先将文件保存到缓存目录中,只有在确认需要它们时才将它们移动到我的图像目录中。这样一来,如果出现一种边缘情况,仍然有办法清除缓存中的所有剩余文件。