在Fragment的onDestroy方法中调用Activity的方法是否安全?

时间:2016-05-21 18:57:53

标签: android android-fragments android-activity android-lifecycle

我有Activity MyActivityFragment MyFragmentActivity的{​​{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()是否已启动销毁过程。

2 个答案:

答案 0 :(得分:1)

Activity的{​​{1}}方法中使用托管onDestroy()是完全安全的。
Fragment生命周期的简化版本如下所示:

  • Fragment:片段附加到主机(通常为onAttach(Context)
  • Activity
  • onCreate(Bundle)
  • onCreateView(LayoutInflater, ViewGroup, Bundle)
  • onStart()
    ...
  • onResume()
  • onPause()
  • onStop()
  • onDestroyView()
  • onDestroy()onDetach()与其主机分离。

因此,对于从FragmentonCreate(Bundle)的整个生命周期,您可以毫无问题地使用和引用托管onDestroy()

答案 1 :(得分:-1)

依靠onDestroy()是不安全的,请检查table

onPause()后可以杀死活动。

当Fragment镜像宿主Activity的生命周期时,它也会被杀死。

  

但假设

那么,应该在主机Activity之前调用onDestroy()

您也可以查看complete Android Fragment & Activity Lifecycle

考虑api 23中的新权限处理程序。用户可以在运行时撤消权限,并且您的进程将以“低内存情况”的方式终止。