如果我有一个DialogFragment
保留且不可取消的,在什么情况下 getActivity() 可以返回 null?
据我了解,可以销毁 Activity 的唯一方法是:
- 通过后退按钮 - 这不可能发生,因为我的对话框是不可取消的
- 通过旋转 - 这(我认为)无关紧要,因为我的对话框被保留并且在我的任何主线程回调运行之前将重新附加活动(由于一个主线程消息中的活动重新创建)。
我的问题是,我错过了一个案例吗?还是我的假设不正确?
如果我有一个DialogFragment
保留且不可取消的,在什么情况下 getActivity() 可以返回 null?
据我了解,可以销毁 Activity 的唯一方法是:
我的问题是,我错过了一个案例吗?还是我的假设不正确?
好的。经过一番思考,我想我理解了我的错误。第一个 DialogFragment 的处理程序已在我的服务中注册,并且从未取消注册。所以当消息到来时,它也会进入这个处理程序。我相信如果还没有的话,它可能会导致内存泄漏:D
不完全是您问题的答案,但是当在 DialogFragment 中使用处理程序时,我有一个 getActivity() 返回 null。即使 Handler 有一个到 DialogFragment 实例的链接,它在 handleMessage() 方法中仍然有 getActivity() 为 null。很高兴听到为什么会这样。
PS 更奇怪的是,第一次创建这个 DialogFragment 时一切正常。当我们创建这个 DialogFragment 的新实例时,他在 Handler 中的 getActivity() 开始返回 null。
我怀疑,当我们创建一个新的 DialogFragment 时,内部的 Handler 仍然以某种方式连接到旧的(已经分离并且没有活动)
必须承认,我的 Handler 不像推荐的那样是静态的。
PPS 我使用兼容库作为片段