Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 什么时候会分裂';s onDestroyView可能会被称为,但它不会';我们不能被摧毁吗?_Android_Android Fragments - Fatal编程技术网

Android 什么时候会分裂';s onDestroyView可能会被称为,但它不会';我们不能被摧毁吗?

Android 什么时候会分裂';s onDestroyView可能会被称为,但它不会';我们不能被摧毁吗?,android,android-fragments,Android,Android Fragments,看看片段的生命周期,我不确定这里会发生什么情况。 当碎片停止活动时,有两种可能的方法 调用适当的回调,销毁视图,然后销毁片段 调用回调,销毁视图,但保持片段本身的活性 两种选择中的哪一种是在哪种情况下进行的?是什么决定了他们中的哪一个? 如果一个碎片被添加到后台,然后被移除/替换,为什么不扔掉呢?为什么要保留它 编辑:我明白了,这是否取决于片段是否被保留 这似乎都取决于片段是否被保留。当片段被保留时,onDestroyView之后会出现CreateView 当片段被保留时(即setRetainI

看看片段的生命周期,我不确定这里会发生什么情况。 当碎片停止活动时,有两种可能的方法

  • 调用适当的回调,销毁视图,然后销毁片段
  • 调用回调,销毁视图,但保持片段本身的活性
  • 两种选择中的哪一种是在哪种情况下进行的?是什么决定了他们中的哪一个? 如果一个碎片被添加到后台,然后被移除/替换,为什么不扔掉呢?为什么要保留它

    编辑:我明白了,这是否取决于片段是否被保留


    这似乎都取决于片段是否被保留。当片段被保留时,onDestroyView之后会出现CreateView


    当片段被保留时(即setRetainInstance(true)),则在旋转设备时记录如下:

    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreate
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onPause
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStop
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDestroyView
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDetach
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume
    
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreate
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onPause
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStop
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDestroyView
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDestroy
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDetach
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreate
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume
    
    但如果不保留它,它是这样的:

    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreate
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onPause
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStop
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDestroyView
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDetach
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume
    
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreate
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onPause
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStop
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDestroyView
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDestroy
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDetach
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreate
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart
    com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume
    

    请看一下图表:


    这是所有生命周期状态的显式可视化。享受。

    当片段被保留时(即setRetainInstance(true))

    如果setRetainInstance(true),则不调用:-OnDestroy() 再次打开fragemnt,则不会调用onCreate()


    但是当setRetainInstance(false):-然后将所有生命周期分段调用

    更改方向,然后登录生命周期方法并自己检查一种情况。相关帖子-,&非常感谢
    setRetainInstance(true)
    !在我的例子中,它导致带有片段的活动关闭时,
    onDestroyView
    没有调用。当重新打开该活动时,在新实例的
    onCreateView
    之后调用了来自旧实例的
    onDestroyView
    。@Artemmostyev,嘿,我需要你的帮助,我也面临同样的问题,来自旧实例的onDestroyView是在新实例的onCreateView之后调用的。你能告诉我解决问题的方法吗this@Vivek不要过分依赖onDestroyView。它很少使用,因为GC可以自动收集所有未使用的对象。如果确实需要,可以将代码移动到
    onPause
    并使用
    onPause/onResume
    对来保存/加载状态。