哪些Android片段生命周期方法需要超级

哪些Android片段生命周期方法需要超级,android,overriding,super,Android,Overriding,Super,目前(Android API 17),Android中唯一提到的super是通过一些代码示例随意提及的(与Android不同,Android会仔细说明哪里需要super) 因此建议根据需要,或等待崩溃,以确定需要调用super的位置。我要求用户分享他们关于哪些片段生命周期方法需要调用super的知识 片段生命周期方法-需要调用super onAttach() onCreate()-大概是的,因为活动版本需要它 onCreateView()-带或不带都可以 onActivityCreated()

目前(Android API 17),Android中唯一提到的
super
是通过一些代码示例随意提及的(与Android不同,Android会仔细说明哪里需要
super

因此建议根据需要,或等待崩溃,以确定需要调用
super
的位置。我要求用户分享他们关于哪些片段生命周期方法需要调用
super
的知识

片段生命周期方法-需要调用
super
  • onAttach()
  • onCreate()
    -大概是的,因为
    活动
    版本需要它
  • onCreateView()
    -带或不带都可以
  • onActivityCreated()
  • onViewStateRestored()
  • onStart()
    -大概是的,因为
    活动
    版本需要它
  • onResume()
    -大概是的,因为
    活动
    版本需要它

  • onPause()
    -大概是的,因为
    活动
    版本需要它

  • onStop()
    -大概是的,因为
    活动
    版本需要它
  • onDestroyView()
  • onDestroy()
    -大概是的,因为
    活动
    版本需要它
  • onDetach()

  • onSaveInstanceState()
    -大概是的,因为
    活动
    版本需要它


除了saveInstanceState上的
之外,所有相应的活动生命周期方法都需要调用super。此外:

  • onAttach()
    -是
  • onActivityCreated()
    -是
  • onViewStateRestored()
    -不是片段方法
  • onDestroyView()
    -是
  • onDetach()
    -是
  • onSaveInstanceState()
    -来自它 看起来像是拒绝
所有需要调用超级共享其方法在android.app.Fragment中的第一行的方法:
mcall=true


这样,FragmentManager可以检查mCalled是否为true,并在未调用时抛出SuperNotCalledException。请参阅以查看此实现。

使用Eclipse生成片段时,onCreateView方法模板代码没有对super.onCreateView的调用。另外,由WROX:Android 4应用程序开发出版的一本非常好的书在其示例生命周期代码中遗漏了它(它没有遗漏对super的任何其他调用)


当然,这两个来源可能都不正确,但使用Eclipse模板而不添加super.onCreateView并没有给我带来问题。

我用大写字母“O”而不是小写字母“O”

表示:OnCreate而不是OnCreate方法

这是一个愚蠢的错误,但需要记住:)


谢谢

我知道这并不能回答你的问题,但总是打电话给super也无妨。@JeffreyBlattman这是一个危险的说法。我可以想到几个类方法,其中调用super或not会改变语义。例如,onDraw()。我不知道OP的答案,但这是一个有效且重要的问题。我支持@Jeffrey Blattman,并且假设总是需要调用
super
,除非在特定情况下。因此,我会将问题翻转过来,并将其表述为“调用super的方法可能会产生副作用,不应该这样做”
many thx;从获得android源代码,现在可以看到相应的片段代码和
mCalled
语句。所以问一些额外的信息-