tutorial studio hechas full fuente español english emulator desarrollo codigo aplicaciones android eclipse adt super

studio - Las ubicaciones de llamadas super() en Android Eclipse Plugin generan código confiable?



codigo fuente android studio (3)

En muchos de los métodos de Android, especialmente los constructores y los métodos reemplazados, debes o incluso debes llamar al método de clase padre usando super () . Cuando utiliza la fuente Eclipse > Métodos de anulación / implementación ... obtiene código de una plantilla con etiquetas TODO como esta:

public MyCanvas(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); }

No entiendo exactamente qué hace la superclase en cada caso, así que siempre inserto mi código en la ubicación exacta de las etiquetas // TODO . En el ejemplo, llamaría a super () antes de mi código en el constructor y después de mi código en onDraw ().

¿Puedo confiar siempre en estas ubicaciones de inserción de código en el código generado? ¿Hay una regla / explicación simple cuándo llamar a super ()?


¿Puedo confiar siempre en estas ubicaciones de inserción de código en el código generado?

No, a veces no quieres llamar al super.method . A veces quieres llamarlo primero, a veces en el último lugar, etc. Depende. Pero, estoy hablando de métodos, no constructores.

¿Hay una regla / explicación simple cuándo llamar a super ()?

Siempre deberás tener todos los super como los puntos de respuesta anteriores. El único caso donde no se llama super es cuando el constructor de la superclase no tiene parámetros; en ese caso, el compilador pondrá el super para ti.

No entiendo exactamente qué hace la superclase en cada caso, así que siempre inserto mi código en la ubicación exacta de las etiquetas // TODO

Si tiene dudas (estoy hablando de súper métodos), siempre puede echarle un vistazo al código fuente. Google Code Search es un buen recurso para hacerlo. Luego puede decidir si coloca su código antes o después del método súper; o incluso, no pongas el supermétodo en absoluto.

Tenga en cuenta que no poner el supermétodo es válido en tiempo de compilación. Sin embargo, algunos métodos en Android no funcionarán a menos que invoque el método super (por ejemplo, el método onResume de la clase Activity ).

Además, algunas veces decidirá si ejecuta el método super o no en tiempo de ejecución. Considera este ejemplo clásico:

@Override public boolean onKeyUp(int keyCode, KeyEvent event) { if( KeyEvent.KEYCODE_BACK == event.getKeyCode() ){ return true; } return super.onKeyUp(keyCode, event); }

Si el usuario presiona la tecla Atrás, no llamará al método súper. Si el usuario no lo hizo, delegue el trabajo al supermétodo.



Esta es una buena pregunta. Desafortunadamente, no hay una regla simple para esto. Necesita saber qué hace la implementación de la superclase. A veces (como en View.onDraw() ), la implementación de la superclase no hace nada; llamar a super () es inofensivo e innecesario. En otros casos (como Activity.onCreate() ) la implementación de la superclase realiza operaciones críticas que se deben ejecutar en algún punto del procesamiento de la subclase. A veces, lo que sucede cuando llamas a super () debe aparecer antes de cualquier procesamiento en la subclase, a veces en otros puntos. Algunas veces quiere reemplazar completamente el procesamiento de la superclase con el suyo, en cuyo caso no llama a super () en absoluto. Tiene completa libertad para llamar a la versión de la superclase en cualquier punto (o incluso en múltiples puntos) en la lógica de su subclase.

En constructores, la llamada a un constructor de superclase (si está presente) debe ser lo primero en el método. Si no tiene uno, el compilador inserta automáticamente una llamada al constructor sin argumentos en la superclase. (Si la superclase no tiene un constructor sin argumentos, o si no es accesible para la subclase, el compilador genera un error).

Si la documentación no proporciona suficiente información, entonces tiene que mirar el código fuente. El código de Android está disponible aquí (versión de Gingerbread). El código API está bajo core .

EDITAR El código ya no está disponible en git.kernel.org. Aquí hay otros dos lugares donde puede navegar por el código:

El código principal está en el repositorio Plataforma> Marcos> Base