我创建了一个Android应用程序项目,并在MainActivity.javaonCreate()
中调用它super.onCreate(savedInstanceState)
。
作为初学者,任何人都可以解释以上内容的目的是什么?
Answers:
您进行的每个活动都是通过一系列方法调用开始的。onCreate()
是这些电话中的第一个。
您的每项活动android.app.Activity
都可以直接扩展,也可以通过将的另一个子类继承而扩展Activity
。
在Java中,当您从类继承时,可以覆盖其方法以在其中运行您自己的代码。一个很常见的例子是toString()
扩展时方法的重写java.lang.Object
。
当我们重写一个方法时,我们可以选择完全替换类中的方法,或者扩展现有父类的方法。通过调用super.onCreate(savedInstanceState);
,您告诉Dalvik VM除了运行父类的onCreate()中的现有代码外,还运行您的代码。如果省略此行,则仅运行代码。现有代码将被完全忽略。
但是,您必须在方法中包含此超级调用,因为如果不这样做,则其中的onCreate()
代码Activity
将永远不会运行,并且您的应用程序将遇到各种问题,例如没有将Context分配给Activity(尽管您会点击一个,SuperNotCalledException
然后才有机会弄清楚自己没有上下文)。
简而言之,Android自己的类非常复杂。框架类中的代码处理诸如UI绘制,房屋清洁以及维护Activity和应用程序生命周期之类的事情。super
调用使开发人员可以在后台运行此复杂代码,同时仍为我们自己的应用程序提供良好的抽象水平。
*派生类onCreate(bundle)
方法必须调用此方法的超类实现。如果不使用“ super ”关键字,它将抛出SuperNotCalledException异常。
对于中的继承Java
,要覆盖超类方法并执行上述类方法,请super.methodname()
在覆盖派生类方法中使用;
Android类的工作方式相同。通过扩展Activity
具有onCreate(Bundle bundle)
编写有意义代码的方法的类并在定义的活动中执行该代码,可以将super关键字与onCreate()方法一起使用super.onCreate(bundle)
。
这是用Activity类onCreate()
方法编写的代码,Android开发团队稍后可能会向该方法添加一些更有意义的代码。因此,为了反映添加的内容,应该在您的类中调用super.onCreate()Activity
。
protected void onCreate(Bundle savedInstanceState) {
mVisibleFromClient = mWindow.getWindowStyle().getBoolean(
com.android.internal.R.styleable.Window_windowNoDisplay, true);
mCalled = true;
}
boolean mVisibleFromClient = true;
/**
* Controls whether this activity main window is visible. This is intended
* only for the special case of an activity that is not going to show a
* UI itself, but can't just finish prior to onResume() because it needs
* to wait for a service binding or such. Setting this to false prevents the UI from being shown during that time.
*
* <p>The default value for this is taken from the
* {@link android.R.attr#windowNoDisplay} attribute of the activity's theme.
*/
它还维护着变量mCalled
,这意味着您已经super.onCreate(savedBundleInstance)
在Activity中调用了。
final void performStart() {
mCalled = false;
mInstrumentation.callActivityOnStart(this);
if (!mCalled) {
throw new SuperNotCalledException(
"Activity " + mComponent.toShortString() +
" did not call through to super.onStart()");
}
}
在此处查看源代码。