如何在应用程序被终止时最好地清除 Android ViewModel?
How to best clear an Android ViewModel when the app is killed?
我目前正在覆盖 ViewModel.onCleared()
以清理我的 ViewModel 以防止任何泄漏(在本例中是从应用程序的内部存储中删除任何未使用的文件)。
当 ViewModel 的 activity 显式完成时,这完全正常。但是由于应用程序被杀死时 onDestroy()
没有被调用 onCleared()
两者都没有。
我的意图(目前)不是要保存任何数据,我只是不希望任何数据泄漏,无论是系统终止我的进程还是用户终止它。
什么有效
- activity启动,用户拍照保存
在应用程序的内部存储中。
- 用户没有离开 activity
节省。
- activity被破坏,
ViewModel.onCleared()
被破坏
删除未使用的图片。
什么不起作用(但可以通过使用 Activity.onSaveInstanceState()
来解决
activity启动,用户拍照保存
在应用程序的内部存储中。
activity的进程不知为何被系统杀死了
Activity.onDestroy
和 ViewModel.onCleared()
都没有被调用。
什么也不行
activity启动,用户拍照保存
在应用程序的内部存储中。
用户滑动关闭应用
Activity.onDestroy
和 ViewModel.onCleared()
都没有被调用。
我担心我将不得不保留需要清理的文件名来解决第三种情况,但这感觉非常极端,我希望有一种使用生命周期方法的更智能的方法。
我是不是漏掉了什么?
如果我没理解错的话,activity中断的时候需要保存一些数据吗?如果是这样,那么最好的实现方式就是onSaveInstanceState()。在 ViewModel 中,保留构成屏幕所需的所有数据很方便。它们会在屏幕旋转时存活,但会在应用程序被系统杀死时消亡。
显然无法确保在所有情况下都调用 ViewModel.onCleared()
。
我解决了我的具体问题,首先将文件保存到缓存目录中,只有在确认需要它们时才将它们移动到我的图像目录中。这样一来,如果出现一种边缘情况,仍然有办法清除缓存中的所有剩余文件。
我目前正在覆盖 ViewModel.onCleared()
以清理我的 ViewModel 以防止任何泄漏(在本例中是从应用程序的内部存储中删除任何未使用的文件)。
当 ViewModel 的 activity 显式完成时,这完全正常。但是由于应用程序被杀死时 onDestroy()
没有被调用 onCleared()
两者都没有。
我的意图(目前)不是要保存任何数据,我只是不希望任何数据泄漏,无论是系统终止我的进程还是用户终止它。
什么有效
- activity启动,用户拍照保存 在应用程序的内部存储中。
- 用户没有离开 activity 节省。
- activity被破坏,
ViewModel.onCleared()
被破坏 删除未使用的图片。
什么不起作用(但可以通过使用 Activity.onSaveInstanceState()
activity启动,用户拍照保存 在应用程序的内部存储中。
activity的进程不知为何被系统杀死了
Activity.onDestroy
和ViewModel.onCleared()
都没有被调用。
什么也不行
activity启动,用户拍照保存 在应用程序的内部存储中。
用户滑动关闭应用
Activity.onDestroy
和ViewModel.onCleared()
都没有被调用。
我担心我将不得不保留需要清理的文件名来解决第三种情况,但这感觉非常极端,我希望有一种使用生命周期方法的更智能的方法。
我是不是漏掉了什么?
如果我没理解错的话,activity中断的时候需要保存一些数据吗?如果是这样,那么最好的实现方式就是onSaveInstanceState()。在 ViewModel 中,保留构成屏幕所需的所有数据很方便。它们会在屏幕旋转时存活,但会在应用程序被系统杀死时消亡。
显然无法确保在所有情况下都调用 ViewModel.onCleared()
。
我解决了我的具体问题,首先将文件保存到缓存目录中,只有在确认需要它们时才将它们移动到我的图像目录中。这样一来,如果出现一种边缘情况,仍然有办法清除缓存中的所有剩余文件。