草庐IT

android - super.onCreate(savedInstanceState);

coder 2023-05-07 原文

我创建了一个 Android 应用程序项目,在 MainActivity.java > onCreate() 它正在调用 super.onCreate(savedInstanceState)

作为初学者,谁能解释一下上面这行的目的是什么?

最佳答案

您所做的每个 Activity 都是通过一系列方法调用启动的。 onCreate() 是这些调用中的第一个。

您的每一个 Activity 都直接扩展 android.app.Activity 或通过继承 Activity 的另一个子类。

在 Java 中,当您从一个类继承时,您可以覆盖其方法以在其中运行您自己的代码。一个非常常见的例子是在扩展 java.lang.Object 时重写 toString() 方法。

当我们重写一个方法时,我们可以选择完全替换我们类中的方法,或者扩展现有父类的方法。通过调用 super.onCreate(savedInstanceState);,您告诉 Dalvik VM 在父类的 onCreate() 中的现有代码之外运行您的代码。如果您省略此行,则仅运行您的代码。现有代码被完全忽略。

但是,您必须在您的方法中包含这个 super 调用,因为如果您不这样做,那么 Activity 中的 onCreate() 代码将永远不会运行,并且您的应用会遇到各种问题,例如没有为 Activity 分配上下文(尽管在您有机会发现自己没有上下文之前,您会遇到 SuperNotCalledException)。

简而言之,Android 自己的类可能非常复杂。框架类中的代码处理 UI 绘制、房屋清洁以及维护 Activity 和应用程序生命周期等内容。 super 调用允许开发人员在后台运行这个复杂的代码,同时仍然为我们自己的应用程序提供良好的抽象级别。

关于android - super.onCreate(savedInstanceState);,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14671897/

有关android - super.onCreate(savedInstanceState);的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. Ruby - 如何处理子类意外覆盖父类(super class)私有(private)字段的问题? - 2

    假设您编写了一个类Sup,我决定将其扩展为SubSup。我不仅需要了解你发布的接口(interface),还需要了解你的私有(private)字段。见证这次失败:classSupdefinitialize@privateField="fromsup"enddefgetXreturn@privateFieldendendclassSub问题是,解决这个问题的正确方法是什么?看起来子类应该能够使用它想要的任何字段而不会弄乱父类(superclass)。编辑:equivalentexampleinJava返回"fromSup",这也是它应该产生的答案。 最佳答案

  3. ruby-on-rails - 从对 super 的调用中清理一个 block - 2

    我正在使用ActiveAttr,它为您提供了很好的通过block选项进行初始化:person=Person.new()do|p|p.first_name='test'p.last_name='man'end但是,在包含ActiveAttr::Model的特定类中,我想绕过此功能,因为我想将该block用于其他用途。所以我们开始吧:classImperator::CommandincludeActiveAttr::ModelendclassMyCommand这失败得很惨,因为该block仍然向上传递到链中,并最终在ActiveAttr内部运行此代码:definitialize(*)sup

  4. ruby - 当前的 Ruby 方法是通过 super 调用的吗? - 2

    在运行时的方法中,有没有办法知道该方法是否已通过子类中的super调用?例如moduleSuperDetectordefvia_super?#whatgoeshere?endendclassFooincludeSuperDetectordefbarvia_super??'super!':'nothingspecial'endendclassFu"nothingspecial"Fu.new.bar#=>"super!"我如何编写via_super?,或者,如果需要,如何编写via_super?(:bar)? 最佳答案 可能有更好的方法

  5. ruby-on-rails - Rails - 父类(super class)不匹配 - 2

    玩转Rails和Controller继承。我创建了一个名为AdminController的Controller,其中一个名为admin_user_controller的子类位于/app/controllers/admin/admin_user_controller.rb这是我的routes.rbnamespace:admindoresources:admin_user#Havetheadminmanagethemhere.endapp/controllers/admin/admin_user_controller.rbclassAdminUserController应用程序/Contr

  6. ruby-on-rails - 如何从 ruby​​ 父类(super class)中的方法访问子类中的当前 __FILE__ - 2

    我希望为日志设置一个默认路径,相对于使用日志的文件路径,像这样:#/path/to/lib/bar.rbclassBardefsettings_file_pathFile.dirname(File.expand_path(__FILE__))endend#/path/to/app/models/foo.rbclassFoo理想输出:#=>/path/to/app/models实际输出:#=>/path/to/lib因为FILE引用了它写入的文件,而不是它被调用的地方,它返回bar.rb文件,但我想要这样的东西返回foo.rb文件的路径,即使该方法是在Bar中定义的。有人有什么建议吗?

  7. ruby - 父类(super class)不匹配、结构、重新加载和 Spork - 2

    假设有下面这个类#derp.rbclassDerp当我加载“./derp.rb”两次时,程序因TypeError:superclassmismatchforclassDerp而失败。好的,这可以通过require来管理。但是我如何为每次使用Spork的测试运行重新加载这些类?require显然不会工作,因为它会缓存加载的文件。 最佳答案 Struct.new正在为您的每次加载创建新类。irb(main):001:0>classTest1classTest1'您可以将返回的Struct.newclass保存到一个变量中,然后您可以使用

  8. Ruby:是否有关键字可以从自身内部调用方法(类似于 super)? - 2

    我想知道:在Ruby中,有没有一种方法可以在不使用其名称的情况下从自身内部调用方法?如果该方法是通过某些元编程技术创建的,那么通过其名称调用它可能会难以阅读。即使对于通常定义的方法,如果您不确定它的好名字,或者如果它的名字很长,通过一些关键字(类似于super)从自身内部调用它可能会很方便。 最佳答案 您可以使用Kernel#__method__以Symbol形式返回当前方法的名称。与super不同,它不是关键字而是常规方法,因此您必须将它连同必需的参数一起传递给send方法才能调用该方法。这是__method__返回的内容:obj

  9. ruby - super(&nil) 在 ruby​​ 中做什么? - 2

    我正在阅读thesourcecodeforconcurrent-ruby,并遇到了这行ruby​​代码。definitialize(*args,&block)super(&nil)#有人可以向我解释一下它应该做什么吗? 最佳答案 您必须首先了解此处使用的&运算符。参见示例:#The&hereconvertsablockargumenttoaprocdefa(&blk)end#The&hereconvertstheproctoablocka(&Proc.new{true})在proc=>block的情况下,它也可以将一些对象变成pro

  10. ruby - 在 define_method 中调用 super 时没有父类(super class)方法 - 2

    当我重写一个已经存在的方法时,为什么会出现以下错误talk:super:nosuperclassmethodtalk(NoMethodError)?如何修复此代码以调用super方法?这是我正在使用的示例代码classFoodeftalk(who,what,where)p"#{who}is#{what}at#{where}"endendFoo.new.talk("monster","jumping","home")classFoodefine_method(:talk)do|*params|super(*params)endendFoo.new.talk("monster","jump

随机推荐