2012-03-08 16 views
17

Los resultados de un reconocimiento de voz se pueden leer en el método onActivityResult(int requestCode, int resultCode, Intent data), como se muestra en this example. Este método anula el mismo método en la clase Activity: ¿por qué la llamada al método de la superclase no es la primera instrucción?¿Debería la llamada al método de superclase ser la primera instrucción?

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) { 
     // Fill the list view with the strings the recognizer thought it could have heard 
     // ... 
    } 

    super.onActivityResult(requestCode, resultCode, data); 
} 

Respuesta

64

métodos que invalidación que forman parte de la creación de componentes (onCreate(), onStart(), onResume(), etc.), debe cadena a la superclase como la primera declaración , para garantizar que Android tenga la oportunidad de hacer su trabajo antes de intentar hacer algo que dependa de que se haya realizado ese trabajo.

métodos que anulan que forman parte de la destrucción componente (onPause(), onStop(), onDestroy(), etc.), usted debe hacer su trabajo en primer lugar y de la cadena a la superclase como la última cosa. De esta forma, en caso de que Android limpie algo de lo que depende tu trabajo, primero habrás hecho tu trabajo.

Métodos que devuelven algo distinto de void (onCreateOptionsMenu(), etc.), a veces encadena a la superclase en la declaración de devolución, suponiendo que no está haciendo específicamente algo que necesita forzar un determinado valor de retorno.

Todo lo demás, como onActivityResult(), depende de usted, en general. Tiendo a encadenarme a la superclase como la primera cosa, pero a menos que tengas problemas, encadenar más adelante debería estar bien.

+10

¿Pero por qué el documento oficial dice: "Siempre llame primero al método de superclase" en onPause()? http://developer.android.com/training/basics/activity-lifecycle/pausing.html#Pause – petrnohejl

+1

awesome .. thank you :) – stinepike

+6

@petrnohejl porque los documentos son malos. – dcow

4

Porque generalmente desea realizar los eventos exclusivos de su actividad anulada antes de pasar el control a una copia de seguridad de la jerarquía de clases. Tenga en cuenta que no siempre es el caso. En ocasiones, debe priorizar las llamadas, por ejemplo, en las devoluciones de llamada que se producen cuando se inicializa la aplicación, y es posible que desee ponerlas en espera para los eventos que suceden cuando se destruye su aplicación para que pueda limpiar primero.

En general, aunque no importe, y si lo hace, se mencionará en el SDK. Me encontré con que menciona algunos lugares en el SKD (creo que en la documentación relacionada con los diálogos) pero no puedo " No recuerdo exactamente en qué página/sección está.

Hay una cierta discusión más detallada sobre el tema aquí: http://groups.google.com/group/android-developers/browse_thread/thread/9ddb2b06c21c8457

Cuestiones relacionadas