【问题标题】:Fragment onStop() versus onDetach(), onDestroy() or onDestroyView() of the same?片段 onStop() 与 onDetach()、onDestroy() 或 onDestroyView() 相同?
【发布时间】:2018-08-25 12:23:03
【问题描述】:

这是一个值得代表 Android 新开发者提出的问题。

想法是提供对框架为何如此编写的深入理解。 此外,开发人员面临着悬空指针、非法状态和此类运行时崩溃,他们不知道为什么会发生这种情况。

程序员现在大量使用回调和工厂模式。使用委托类对象减少了对 Singleton 类的需求,以及 C、C++ 等语言中对多重继承的需求。

当开发人员了解组件之间基于 Handler 的消息传递时,他们会激动不已。

哪些方法更可靠地知道 Fragment 的上下文不应再由其组件使用,或者在作为其父对象的 Activity 之外使用:

  1. onStop()
  2. onDetach()
  3. onDestroyView()
  4. onDestroy()

最好的问候。

【问题讨论】:

标签: android android-fragments android-context


【解决方案1】:

请通过此链接了解 Fragments 的生命周期

它表示当您当前的片段(您可以在 Application 扩展类中使用 getter 和 setter 进行跟踪)处于死亡阶段时,getView()getActivity() 将返回 null。所以你不应该使用这些方法,并且要小心相关的生命周期回调(再次可以使用布尔 getter 和 setter 在常规具体 Fragments 和 Activity 类的抽象 BaseFragment/BaseActivity 子类中进行跟踪)。

source

【讨论】:

    【解决方案2】:

    我正在跟踪所有这些方法,以停止使用片段的getView()。我逻辑上觉得onDestroy(),是最适合这个目的的方法。

    我在这个答案中以相同的方式使用跟踪器: https://stackoverflow.com/a/52017405/787399

    这种继承策略极大地帮助和改进了ActivityFragments 生命周期的含义。我事实上它是如此的强大,以至于你可以拥有那些没有隐式提供的功能:就像你可以处理系统后压(在onBackPressed() 方法中的BaseActivity 管理),只要在Fragment 上按下后退,并且您可以阻止back pressed event 调用,直到满足某些条件,或者放置一个OK_Cancel confirmation alert,无论您是否想真正退出当前片段。

    编码愉快 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多