2012-03-29 16 views
14

He leído varias publicaciones que describen la diferencia entre onStart() y onResume(): onStart() se invoca cuando la actividad se vuelve visible, se llama a onResume() cuando la actividad está lista para la interacción del usuario. multa.android: cuándo usar onStart(), onStop()?

Siempre acabo de agregar código a onPause() y onResume(), y nunca me molestó con onStart() y onStop().

¿Alguien puede dar algunos ejemplos concretos de lo que podría hacer en onStart(), frente a onResume()? Lo mismo ocurre con onStop() y onPause(), ¿cómo es útil onStop()? Debo estar perdiendo algo fundamental aquí.

Respuesta

9

onStop() serán llamados (por ejemplo) cuando salga de la actividad por alguna otra actividad (edit:. Casi ver a commonswares comentario sobre actividades temáticas de diálogo). Por ejemplo, si usa startActivity() en la actividad A para iniciar la actividad B. Cuando vuelve a presionar en la actividad B, volverá a la actividad A y se llamará a onStart.

Esto difiere de algunas de las razones por las que se pueden llamar sin llamar al onStop. Si, por ejemplo, se apaga la pantalla o se presiona el botón standy, se llamará al , pero probablemente no al onStop (dependiendo de la memoria disponible y otras cosas), por lo que es una "pausa más ligera". onStop probablemente sea llamado eventualmente incluso en este caso, pero no de manera inmediata.

Ok, pero ¿cuál es el uso

A menudo no hay ningún uso específico, pero no pudo ser. Dado que sus actividades mantendrán su estado de memoria en la pila incluso después de comenzar otra actividad, esa pila aumentará con la cantidad de actividades iniciadas (altura de la pila). Esto puede generar un gran uso de memoria en algunas aplicaciones. Después de un tiempo, el marco entrará en acción y eliminará algunas actividades en la pila, pero esto es bastante directo y probablemente significará que se retendrán muchos estados al regresar.

Por lo tanto, un uso de ejemplo para onStart/onStop es si desea liberar algún estado al dejar una actividad para otra y volver a crearla cuando regrese. Lo he usado para establecer los adaptadores de lista en nulas, cachés de imágenes vacías y similares (en aplicaciones muy específicas). Si desea liberar la memoria utilizada por las vistas visibles en un adaptador de lista, puede volver a crearlo en onstart y permitir que el gc recoja las vistas. Esto aumentará la probabilidad de que el resto del estado de memoria de la actividad viva.

Algunos recursos se pueden considerar lo suficientemente buenos como para guardarlos mientras la instancia de actividad está activa y otros solo cuando están en la parte frontal de la pila. Depende de usted decidir qué es lo mejor en su aplicación y la granularidad de crear/iniciar/reanudar le da eso.

+2

"se llamará a onStop() cuando abandones la actividad por alguna otra actividad"; en realidad, se invocará cuando tu actividad ya no esté visible. Si una actividad con tema de diálogo aparece en primer plano, no se llama a 'onStop() '. – CommonsWare

+0

Buen punto. La actividad de llamada aún podría estar visible en segundo plano en ese ejemplo (y las cosas de reciclaje serían malas). Estaba mostrando un ejemplo de dónde sucede y cómo lo he usado para reducir el uso de memoria, pero esta es una buena excepción. Como regla general, sigue siendo bueno. Todavía tengo que ver montones de actividades de diálogo llamándose entre sí. –

+0

Oh, sin duda, las actividades con temas de diálogo son inusuales. – CommonsWare

0

Creo que su pregunta es bastante explica aquí en el doc: leer sobre el Activity Life Cycle

+0

'onStart()' funciona después de 'onCreate()' finalizó su tarea. 'onResume()' funciona cuando regresas a tu 'Intent' o' Activity' presionando el botón Atrás. –

+1

@Hamza eso no es verdad. cada vez que su actividad pasa de ser invisible a visible, se invoca onStart(). –

+0

¡Ningún hombre! Lo hice onStart() en mi aplicación. Fue porque, quería obtener datos del servicio web después de cargar la actividad. Verifique esto en la Guía de Android [enlace] (http://developer.android.com/reference/android/app/Activity.html) –

1

onStart() funciona después de que onCreate() finalizó su tarea. Es un buen lugar para poner un broadcastReceiver o inicializar algún estado sobre la interfaz de usuario que debería mostrarse constantemente cada vez que el usuario vuelve a esta actividad.

onResume() funciona cuando regresa a su intención o actividad presionando el botón Atrás.Entonces se llamará a OnPause cada vez que una actividad diferente llegue al primer plano.

Cuestiones relacionadas