Every Activity you make is started through a sequence of method calls.
onCreate()
is the first of these calls.
Each and every one of your Activities extends
android.app.Activity
either directly or by subclassing another subclass of Activity
.
In Java, when you inherit from a class, you can override its methods to run your own code in them. A very common example of this is the overriding of the
toString()
method when extending java.lang.Object
.
When we override a method, we have the option of completely replacing the method in our class, or of extending the existing parent class' method. By calling
super.onCreate(savedInstanceState);
, you tell the Dalvik VM to run your code in addition to the existing code in the onCreate() of the parent class. If you leave out this line, then only your code is run. The existing code is ignored completely.
However, you must include this super call in your method, because if you don't then the
onCreate()
code in Activity
is never run, and your app will run into all sorts of problem like having no Context assigned to the Activity (though you'll hit a SuperNotCalledException
before you have a chance to figure out that you have no context).
In short, Android's own classes can be incredibly complex. The code in the framework classes handles stuff like UI drawing, house cleaning and maintaining the Activity and application lifecycles.
super
calls allow developers to run this complex code behind the scenes, while still providing a good level of abstraction for our own apps.
In
Java
When you do inheritance If you want to override the super class method and want to execute above class method code also in that case we use super.methodname()
in the override method of derived class;
Android class works in same. You are extending the
Activity
class which have onCreate(Bundle bundle)
method in which meaningful code is written. So to execute that code in our defined activity. You have to use super.onCreate(bundle)
.
This is code written in Activity class
onCreate()
method and it might Android Dev team will add some more meaningfully code in this method ahead so it always you are suppose to call this in your Activity
class.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.
*/
It also maintain the a variable
mCalled
which mean that whether you have called the super.onCreate(savedBundleInstance)
in your Activity.final void performStart() {
mCalled = false;
mInstrumentation.callActivityOnStart(this);
if (!mCalled) {
throw new SuperNotCalledException(
"Activity " + mComponent.toShortString() +
" did not call through to super.onStart()");
}
}
No hay comentarios.:
Publicar un comentario