He creado un proyecto de aplicación de Android y en MainActivity.java> onCreate()
está llamando super.onCreate(savedInstanceState)
.
Como principiante, ¿alguien puede explicar cuál es el propósito de la línea anterior?
Respuestas:
Cada actividad que realiza se inicia mediante una secuencia de llamadas a métodos. onCreate()
es la primera de estas llamadas.
Todas y cada una de sus Actividades se extienden android.app.Activity
directamente o subclasificando otra subclase de Activity
.
En Java, cuando hereda de una clase, puede anular sus métodos para ejecutar su propio código en ellos. Un ejemplo muy común de esto es la invalidación del toString()
método al extender java.lang.Object
.
Cuando anulamos un método, tenemos la opción de reemplazar completamente el método en nuestra clase, o de extender el método de la clase padre existente. Al llamar super.onCreate(savedInstanceState);
, le dice a la VM Dalvik que ejecute su código además del código existente en onCreate () de la clase principal. Si omite esta línea, solo se ejecutará su código . El código existente se ignora por completo.
Sin embargo, debe incluir esta súper llamada en su método, porque si no lo hace, el onCreate()
código Activity
nunca se ejecutará y su aplicación se encontrará con todo tipo de problemas, como no tener un contexto asignado a la actividad (aunque presionará una SuperNotCalledException
antes de tener la oportunidad de darse cuenta de que usted no tiene ningún contexto).
En resumen, las clases propias de Android pueden ser increíblemente complejas. El código en las clases del marco maneja cosas como el dibujo de la interfaz de usuario, la limpieza de la casa y el mantenimiento de la actividad y los ciclos de vida de la aplicación. super
Las llamadas permiten a los desarrolladores ejecutar este código complejo entre bastidores, sin dejar de ofrecer un buen nivel de abstracción para nuestras propias aplicaciones.
* El onCreate(bundle)
método de clase derivado debe llamar a la implementación de superclase de este método. Lanzará una excepción SuperNotCalledException si no se utiliza la palabra clave " super ".
Para herencia en Java
, para anular el método de superclase y también para ejecutar el método de clase anterior, utilice super.methodname()
en el método de clase derivada anulante;
La clase de Android funciona de la misma manera. Al extender la Activity
clase que tiene un onCreate(Bundle bundle)
método en el que se escribe código significativo y ejecutar ese código en la actividad definida, use la palabra clave super con el método onCreate () like super.onCreate(bundle)
.
Este es un código escrito en el onCreate()
método de la clase Activity y el equipo de desarrollo de Android podría agregar más código significativo a este método más adelante. Entonces, para reflejar las adiciones, se supone que debe llamar a super.onCreate () en su Activity
clase.
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.
*/
También mantiene la variable, lo mCalled
que significa que ha llamado super.onCreate(savedBundleInstance)
en su Actividad.
final void performStart() {
mCalled = false;
mInstrumentation.callActivityOnStart(this);
if (!mCalled) {
throw new SuperNotCalledException(
"Activity " + mComponent.toShortString() +
" did not call through to super.onStart()");
}
}
Vea el código fuente aquí.
Porque sobre super.onCreate () llegará a la clase Activity (clase principal de cualquier actividad) para cargar el SavedInstanceState, y normalmente no establecemos ningún estado de instancia guardado, pero el marco de Android se hizo de tal manera que deberíamos llamar ese.
super.onCreate(savedInstanceState)
, a menos que tenga algún otro error en él
Es información que desea que se devuelva a su aplicación, a través de onCreate (), si la actividad se destruye y se reinicia debido a alguna razón implícita (por ejemplo, no porque el usuario presionó el botón Atrás). El uso más común de onSaveInstanceState () es manejar las rotaciones de pantalla, ya que, de forma predeterminada, las actividades se destruyen y se recrean cuando el usuario desliza el teclado G1.
La razón para llamar a super.onCreate (SavedInstanceState) es porque su código no se compilará de otra manera. ;-)