我有Activity
MyActivity
和Fragment
MyFragment
。 Activity
的{{1}}方法以onDestroy()
开头。
从日志语句中查看super.onDestroy()
源代码,看起来Android
的超级Activity
方法调用onDestroy()
'{ {1}}方法。然后,当Fragment
的{{1}}方法完成后,执行onDestroy()
的{{1}}方法的其余部分。我相信,Fragment
只有在onDestroy()
的{{1}}方法完成后才会被销毁。
这让我觉得从Activity
的{{1}}方法我可以安全地在onDestroy()
上调用快速方法并依赖Activity
的属性。我永远不会这样做,但假设我在MyFragment的onDestroy方法中可以依赖于MyActivity中的属性和方法吗?
文档对Fragment
的{{1}}方法的描述,“在您的活动被销毁之前收到的最终通话”,我指的是此方法返回后onDestroy()
将被销毁。
MyFragment
的{{1}}方法文档并未真正说明onDestroy()
是否已启动销毁过程。
答案 0 :(得分:1)
在Activity
的{{1}}方法中使用托管onDestroy()
是完全安全的。
Fragment
生命周期的简化版本如下所示:
Fragment
:片段附加到主机(通常为onAttach(Context)
)Activity
onCreate(Bundle)
onCreateView(LayoutInflater, ViewGroup, Bundle)
onStart()
onResume()
onPause()
onStop()
onDestroyView()
onDestroy()
:onDetach()
与其主机分离。 因此,对于从Fragment
到onCreate(Bundle)
的整个生命周期,您可以毫无问题地使用和引用托管onDestroy()
。
答案 1 :(得分:-1)
依靠onDestroy()是不安全的,请检查table。
onPause()后可以杀死活动。
当Fragment镜像宿主Activity的生命周期时,它也会被杀死。
但假设
那么,应该在主机Activity之前调用onDestroy()
。
您也可以查看complete Android Fragment & Activity Lifecycle。
考虑api 23中的新权限处理程序。用户可以在运行时撤消权限,并且您的进程将以“低内存情况”的方式终止。