Android 保留的、不可取消的DialogFragment中的GetActivity()何时可以为null?

Android 保留的、不可取消的DialogFragment中的GetActivity()何时可以为null?,android,android-fragments,android-lifecycle,android-dialogfragment,Android,Android Fragments,Android Lifecycle,Android Dialogfragment,如果我有一个保留且不可取消的对话框片段,在什么情况下getActivity()可以返回null 据我所知,销毁活动的唯一方法是: 通过后退按钮-这是不可能发生的,因为我的对话框是不可取消的 通过旋转-这(我认为)无关紧要,因为在运行任何主线程回调之前,我的对话框被保留,活动将被重新附加(由于活动在一条主线程消息中重新创建) 我的问题是,我是否错过了一个案子?或者我的假设不正确?这并不是对您问题的确切回答,但当在DialogFragment中使用处理程序时,我有一个getActivity()返回n

如果我有一个保留且不可取消的
对话框片段
,在什么情况下getActivity()可以返回null

据我所知,销毁活动的唯一方法是:

  • 通过后退按钮-这是不可能发生的,因为我的对话框是不可取消的
  • 通过旋转-这(我认为)无关紧要,因为在运行任何主线程回调之前,我的对话框被保留,活动将被重新附加(由于活动在一条主线程消息中重新创建)
    我的问题是,我是否错过了一个案子?或者我的假设不正确?

    这并不是对您问题的确切回答,但当在DialogFragment中使用处理程序时,我有一个getActivity()返回null。即使处理程序有一个到DialogFragment实例的链接,它在handleMessage()方法中的getActivity()仍然为null。我很高兴听到为什么会这样

    更奇怪的是,第一次创建DialogFragment时,一切都很好。当我们创建此DialogFragment的新实例时,处理程序中的getActivity()开始返回null

    我怀疑,当我们创建一个新的DialogFragment时,内部的处理程序仍然以某种方式连接到旧的DialogFragment(它已经被分离并且没有活动)

    必须承认,我的处理程序并不像推荐的那样是静态的


    p.p.S我在片段中使用compat lib,这并不是对您问题的确切回答,但在DialogFragment中使用处理程序时,我有一个getActivity()返回null。即使处理程序有一个到DialogFragment实例的链接,它在handleMessage()方法中的getActivity()仍然为null。我很高兴听到为什么会这样

    更奇怪的是,第一次创建DialogFragment时,一切都很好。当我们创建此DialogFragment的新实例时,处理程序中的getActivity()开始返回null

    我怀疑,当我们创建一个新的DialogFragment时,内部的处理程序仍然以某种方式连接到旧的DialogFragment(它已经被分离并且没有活动)

    必须承认,我的处理程序并不像推荐的那样是静态的


    p.p.S我对片段使用compat-lib。经过思考,我想我理解了我的错误。第一个DialogFragment中的处理程序已在我的服务中注册,并且从未注销。因此,当消息到来时,它也会进入这个处理程序。我相信它可能会导致内存泄漏,如果还没有:D

    Ok。经过思考,我想我理解了我的错误。第一个DialogFragment中的处理程序已在我的服务中注册,并且从未注销。因此,当消息到来时,它也会进入这个处理程序。我相信如果还没有,它可能会导致内存泄漏:D

    使用处理程序总是有问题的,因为它不与任何生命周期相关联,除了它所绑定的循环器的生命周期。因此,是的,使用处理程序很容易泄漏对象。使用处理程序总是有问题的,因为它不与任何生命周期相关联,除了它所绑定的循环器的生命周期。因此,是的,使用处理程序很容易泄漏对象。