android - studio - super.onCreate(savedInstanceState);
webview android studio 2017 (4)
Siendo un novato, tengo una pregunta muy básica: he creado un Proyecto de Aplicación de Android en Eclipse, en MainActivity.java> onCreate()
llama a super.onCreate(savedInstanceState)
.
¿Alguien puede explicar cuál es el propósito de la línea anterior?
* La clase onCreate(bundle)
método onCreate(bundle)
debe llamar a la implementación de superclase de este método. Lanzará una excepción SuperNotCalledException si no se usa la palabra clave " super ".
Para la herencia en Java
, para anular el método de superclase y también para ejecutar el método de clase anterior, use super.methodname()
en el método de clase derivada de anulación;
La clase de Android funciona de la misma manera. Al extender la clase Activity
que tiene el onCreate(Bundle bundle)
en el que se escribe un código significativo y para ejecutar ese código en la actividad definida, use la palabra clave super con el método onCreate () como super.onCreate(bundle)
.
Este es un código escrito en la clase Activity en el método de onCreate()
y el equipo de Android Dev podría agregar un código más significativo a este método más adelante. Entonces, para reflejar las adiciones, se supone que debes llamar a super.onCreate () en tu clase de 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.
*/
También mantiene la variable mCalled
que significa que ha llamado a 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í.
Cada actividad que haces se inicia a través de una secuencia de llamadas a métodos. onCreate()
es la primera de estas llamadas.
Todas y cada una de sus Actividades extienden android.app.Activity
ya sea directamente o mediante la subclasificación de 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 anulación del método toString()
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 existente de la clase padre. Llamando a 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 padre. Si omite esta línea, solo se ejecuta su código . El código existente se ignora por completo.
Sin embargo, debe incluir esta supercompetencia en su método, ya que si no lo hace, el código onCreate()
en la 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 SuperNotCalledException
una SuperNotCalledException
antes de que puedas descubrir que no tienes contexto.
En resumen, las propias clases de Android pueden ser increíblemente complejas. El código en las clases marco maneja cosas como el dibujo UI, la limpieza de la casa y el mantenimiento de los ciclos de vida de la actividad y la aplicación. super
llamadas super
permiten a los desarrolladores ejecutar este código complejo detrás de las escenas, al tiempo que proporcionan un buen nivel de abstracción para nuestras propias aplicaciones.
Es información que desea devolver 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 rotaciones de pantalla, ya que de forma predeterminada, las actividades se destruyen y se vuelven a crear cuando el usuario desliza el teclado G1.
La razón para llamar a super.onCreate (savedInstanceState) es porque su código no compilará de lo contrario. ;-)
Porque en super.onCreate () alcanzará la clase Activity (clase padre de cualquier actividad) para cargar el savedInstanceState, y normalmente no establecemos ningún estado de instancia guardado, pero el framework de Android está hecho de tal manera que, deberíamos estar llamando ese.