什么时候getActvity()在保留的,不可取消的DialogFragment中为null?

时间:2012-09-27 13:27:35

标签: android android-fragments android-lifecycle android-dialogfragment

如果我有DialogFragment保留且不可取消,在什么情况下getActivity()会返回null?

据我了解,可以销毁活动的唯一方法是:

  1. 通过后退按钮 - 由于我的对话框无法取消,因此无法实现
  2. 通过旋转 - 这个(我认为)无关紧要,因为我的对话框被保留,并且在运行任何主线程回调之前,Activity将重新附加(由于一个主线程消息中的活动重新创建)。
  3. 我的问题是,我错过了一个案例吗?或者我的假设不正确?

2 个答案:

答案 0 :(得分:0)

不完全是你的问题的答案,但是当在DialogFragment中使用Handler时,我有一个getActivity()返回null。即使Handler有一个指向DialogFragment实例的链接,它仍然在handleMessage()方法中将getActivity()设置为null。很高兴听到为什么会这样。

P.S。更奇怪的是,第一次创建这个DialogFragment一切都很好。当我们创建这个DialogFragment的新实例时,他在Handler中的getActivity()开始返回null。

我怀疑,当我们创建一个新的DialogFragment时,Handler里面仍然会附加到旧的(已经分离并且没有活动)

必须承认,我的处理程序不是推荐的静态。

P.P.S我使用compat lib作为片段

答案 1 :(得分:0)

确定。在考虑之后,我想我理解了我的错误。来自第一个DialogFragment的处理程序已在我的服务中注册,并且从未取消注册。因此,当消息出现时,它也会进入此处理程序。我相信它可能会导致内存泄漏,如果还没有:D