super.onCreate(savedInstanceState);
作为一个新手,我有一个非常基本的问题:我已经在Eclipse中创build了一个Android应用程序项目,在MainActivity.java> onCreate()
它调用super.onCreate(savedInstanceState)
。
任何人都可以解释上面的目的是什么?
你所做的每个活动都是通过一系列的方法调用来开始的。 onCreate()
是这些调用中的第一个。
您的每一个活动都直接扩展了android.app.Activity
,或者通过子类化Activity
另一个子类来扩展。
在Java中,当你从一个类inheritance时,你可以重写它的方法来在它们中运行你自己的代码。 一个非常常见的例子是在扩展java.lang.Object
时重写toString()
方法。
当我们重写一个方法时,我们可以select完全replace我们的类中的方法,或者扩展现有的父类的方法。 通过调用super.onCreate(savedInstanceState);
, 除了父类的onCreate()中的现有代码以外,还要让Dalvik VM运行代码。 如果你忽略这一行,那么只有你的代码运行。 现有的代码完全被忽略。
然而,你必须在你的方法中包含这个超级调用,因为如果你不这样做,那么Activity
的onCreate()
代码永远不会运行,你的应用程序将会遇到各种各样的问题,比如没有Context被分配给Activity在你有机会发现你没有上下文之前,你会遇到一个SuperNotCalledException
)。
总之,Android自己的类可以非常复杂。 框架类中的代码处理像UI绘图,房屋清洁和维护活动和应用程序生命周期等内容。 super
调用允许开发人员在幕后运行这个复杂的代码,同时仍然为我们自己的应用程序提供了一个很好的抽象级别。
派生类onCreate(bundle)
方法必须调用这个方法的超类实现。 如果不这样,则会引发SuperNotCalledExceptionexception
在Java
当你inheritance时如果你想重写超类方法,并且也想在这种情况下执行上面的类方法代码,我们在派生类的override方法中使用super.methodname()
;
Android类的工作原理是一样的。 您正在扩展具有写入有意义代码的onCreate(Bundle bundle)
方法的Activity
类。 所以要在我们定义的活动中执行该代码。 你必须使用super.onCreate(bundle)
。
这是用Activity类的onCreate()
方法编写的代码,可能Android Dev团队会在这个方法中添加一些更有意义的代码,所以你总是可以在Activity
类中调用它。
protected void onCreate(Bundle savedInstanceState) { mVisibleFromClient = mWindow.getWindowStyle().getBoolean( com.android.internal.R.styleable.Window_windowNoDisplay, true); mCalled = true; } boolean mVisibleFromClient = true; /** * Control whether this activity's 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 allows * you to prevent your 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. */
它还保留了一个variablesmCalled
,这意味着您是否在Activity中调用了super.onCreate(savedBundleInstance)
。
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(任何活动的父类)类来加载savedInstanceState,我们通常不会设置任何保存的实例状态,但android框架使得我们应该调用那。
如果由于某种隐含的原因(例如,不是因为用户按下后退button)而导致活动被销毁并重新启动,那么这是您想要通过onCreate()返回到您的应用程序的信息。 onSaveInstanceState()最常见的用途是处理屏幕旋转,因为默认情况下,当用户滑出G1键盘时,活动将被销毁并重新创build。
调用super.onCreate(savedInstanceState)的原因是因为你的代码不会另外编译。 😉