我有一个父片段,它包含一个子片段。为了调试,这两个片段的onAttach
和onCreateView
方法都被记录下来。
当我这样将父片段添加到Activity中:
parent.setRetainInstance(false);
旋转后的输出如下:
07-08 20:10:52.295: E/TAG(14216): Parent's onAttach called!
07-08 20:10:52.295: E/TAG(14216): Parent's onCreateView called!
07-08 20:10:52.305: E/TAG(14216): Child's onAttach called!
07-08 20:10:52.305: E/TAG(14216): Child's onCreateView called!
但是保留为:
parent.setRetainInstance(true);
旋转后的输出结果如下:
07-08 20:10:55.395: E/TAG(14216): Parent's onAttach called!
07-08 20:10:55.395: E/TAG(14216): Parent's onCreateView called!
07-08 20:10:55.400: E/TAG(14216): Child's onCreateView called!
总结一下,如果父片段是保留片段,则子片段的
onAttach
方法不会被调用(我假设onDetach
也不会)。这个场景只是一个演示,实际上我需要调试一个复杂的应用程序以找出导致故障的原因。该应用程序存在内存问题,因为在方向更改后,子片段泄漏了先前的活动(作为在onAttach
中设置的监听器)。如果有人遇到同样的问题,解决方法可以是从父片段的
onAttach
手动调用子片段的onAttach
。问题是:这是一个bug吗?