我创建了一个 Android 应用程序项目,并且在 MainActivity.java >onCreate()
它正在调用super.onCreate(savedInstanceState)
.
作为初学者,任何人都可以解释上述行的目的是什么?
您所做的每个活动都是通过一系列方法调用启动的。onCreate()
是这些电话中的第一个。
您的每一个活动android.app.Activity
都直接扩展或通过继承Activity
.
在 Java 中,当您从一个类继承时,您可以覆盖其方法以在其中运行您自己的代码。一个非常常见的例子是toString()
在扩展时重写方法java.lang.Object
。
当我们重写一个方法时,我们可以选择完全替换我们类中的方法,或者扩展现有父类的方法。通过调用super.onCreate(savedInstanceState);
,您告诉 Dalvik VM除了父类的 onCreate() 中的现有代码之外,还运行您的代码。如果您省略此行,则仅运行您的代码。现有代码被完全忽略。
但是,您必须在您的方法中包含这个超级调用,因为如果您不这样做,那么其中的onCreate()
代码Activity
将永远不会运行,并且您的应用程序将遇到各种问题,例如没有为 Activity 分配上下文(尽管您会遇到aSuperNotCalledException
在你有机会弄清楚你没有上下文之前)。
简而言之,Android 自己的类可能非常复杂。框架类中的代码处理 UI 绘制、房屋清洁以及维护 Activity 和应用程序生命周期等内容。super
调用允许开发人员在幕后运行这个复杂的代码,同时仍然为我们自己的应用程序提供良好的抽象级别。
*派生类onCreate(bundle)
方法必须调用该方法的超类实现。如果不使用“ super ”关键字,它将抛出异常SuperNotCalledException 。
对于 in 中的继承Java
,要覆盖超类方法并执行上述类方法,super.methodname()
请在覆盖的派生类方法中使用;
Android 类的工作方式相同。通过扩展具有编写有意义代码的方法的Activity
类并在定义的活动中执行该代码,请使用 super 关键字和 onCreate() 等方法。onCreate(Bundle bundle)
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()");
}
}
在此处查看源代码。
因为在 super.onCreate() 时,它会到达 Activity(任何 Activity 的父类)类来加载 savedInstanceState,我们通常不设置任何保存的实例状态,但是 android 框架这样做了,我们应该调用那。
如果活动由于某些隐含原因(例如,不是因为用户按下后退按钮)而被销毁并重新启动,则这是您希望通过 onCreate() 返回到应用程序的信息。onSaveInstanceState() 最常见的用途是处理屏幕旋转,因为默认情况下,当用户滑出 G1 键盘时,活动会被销毁并重新创建。
调用 super.onCreate(savedInstanceState) 的原因是因为您的代码不会编译。;-)