我很困惑为什么有人会根据文档Activity.onDestroy()
覆盖而不是if :onPause()
在某些情况下,系统将简单地终止活动的托管进程,而不在其中调用此方法(或任何其他方法),
onDestroy()
尽管有这个警告,我还是看到了很多覆盖的代码。为什么?
我很困惑为什么有人会根据文档Activity.onDestroy()
覆盖而不是if :onPause()
在某些情况下,系统将简单地终止活动的托管进程,而不在其中调用此方法(或任何其他方法),
onDestroy()
尽管有这个警告,我还是看到了很多覆盖的代码。为什么?
如果不能可靠地调用 Activity.onDestroy(),为什么要覆盖它?
并不是说它不可靠……只是它不是唯一Activity
可以杀死的方法。如果您的设备开始缺乏内存资源,Android 系统可能会破坏您的整个进程而没有ActivityManager
机会调用。onDestroy()
出于这个原因,您永远不应该依赖onDestroy()
被调用,并且应该始终将持久状态保存在onPause
.
如果进程被直接杀死,活动持有的对象将被销毁。如果进程没有被杀死(并且onDestroy()
被调用),那么如果需要,您将不得不手动释放对象。例如,当进程被杀死时,Cursor 会被销毁,但如果进程没有被销毁,而你反复进入活动,则会出现资源泄漏。