onrestart example android android-emulator onpause

example - onrestart android



onPause() y onStop() en actividad (6)

Soy nuevo en el desarrollo de Android y todavía no puedo entender los onPause() y onStop() en una actividad.

En mi aplicación, tengo una clase estática a la que denomino Contador y mantiene el estado de las variables en la memoria de la aplicación. Mi aplicación funciona bien en el emulador. Lo que intentaba probar era el comportamiento diferencial de onPause() frente a onStop() .

Para onPause , quería que los valores almacenados en los miembros de la clase Counter se mantuvieran, mientras que al llamar a onStop() quería que los valores del contador se restablecieran a cero. Así que onStop() y configuro las variables dentro de la clase de contador en cero. Sin embargo, en el emulador, parece que no puedo obtener la aplicación en el estado Pausado. En el emulador, abro mi aplicación, la ejercito. Luego presioné el botón de inicio (no el botón de retroceso) del emulador y onPause() otra aplicación, creyendo que esto imitaría la actividad de onPause() . Sin embargo, el emulador no parece cumplir con esto (estoy usando un emulador de armeabi v7a), parece que siempre está llamando onStop() porque todos los valores de mi contador vuelven a cero, según mi anulación en onStop() . ¿Esto es inherente al emulador o estoy haciendo algo mal para poner mi actividad en el estado de pausa?


Estoy de acuerdo con Milter!

onPause ():

"Si una actividad ha perdido el foco pero sigue siendo visible (es decir, una actividad nueva no transparente o de tamaño completo tiene el foco en la parte superior de su actividad), se detiene. Una actividad en pausa está completamente activa (mantiene todo el estado y "La información del miembro y permanece adjunta al administrador de ventanas), pero puede ser eliminada por el sistema en situaciones de memoria extremadamente baja".

Si intercambias aplicaciones sin presionar Atrás (presiona y mantén presionado INICIO), el sistema operativo se activará en Pausa. Cuando regrese a su actividad (mantenga presionado INICIO nuevamente) en onResume, debe tener todas sus variables privadas preservadas. Pero no puedes controlar al usuario, ¿verdad?

Si anticipa que el usuario va a abandonar su aplicación y el sistema operativo le llama a onStop, es mejor que guarde sus datos si tiene la intención de continuar donde lo dejó.

También tengo un temporizador, necesito guardar el tiempo transcurrido para que cuando el usuario regrese pueda restaurar los datos. Aquí está mi ejemplo para guardar:

@Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); // Save UI state changes to the savedInstanceState. // This bundle will be passed to onCreate if the process is // killed and restarted. savedInstanceState.putLong("elapsedTime", elapsedTime); // etc. }

Y mi código para restaurar:

@Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); // Restore UI state from the savedInstanceState. // This bundle has also been passed to onCreate. elapsedTime = savedInstanceState.getLong("elapsedTime"); }

Coloca estos métodos dentro de tu clase y listo. Tenga en cuenta que la cadena "elapsedTime" en mi caso es una CLAVE para el sistema y debe ser única. Use cadenas únicas para cada pieza de datos que le gustaría guardar. Por ejemplo, "startClock", "ClockTextColor", etc ...


Las diferencias entre cuando se llama onPause () y onStop () pueden ser bastante sutiles. Sin embargo, como se explica here , onPause () generalmente se ejecuta cuando otra actividad se enfoca (tal vez como una ventana emergente o transparente) mientras la actividad actual aún se está ejecutando. Si se aleja completamente de la aplicación (por ejemplo, al presionar el botón de inicio), la actividad ya no es visible y el sistema puede ejecutarse enStop (). Solo digo que sí porque, como mencionó Alex, hay algunos casos en los que no se llama a onStop antes de que se destruya la Actividad.


No estoy seguro de con qué emulador está probando, pero onPause es el único método al que siempre se garantiza que se llamará cuando su Activity pierda el foco (y lo digo siempre porque en algunos dispositivos, específicamente en aquellos que ejecutan Android 3.2+, onStop no es Siempre garantizado ser llamado antes de que la Activity sea ​​destruida).

Una buena manera de entender el ciclo de vida de la Activity para los principiantes es ensuciar sus métodos anulados con Log s. Por ejemplo:

public class SampleActivity extends Activity { /** * A string constant to use in calls to the "log" methods. Its * value is often given by the name of the class, as this will * allow you to easily determine where log methods are coming * from when you analyze your logcat output. */ private static final String TAG = "SampleActivity"; /** * Toggle this boolean constant''s value to turn on/off logging * within the class. */ private static final boolean VERBOSE = true; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (VERBOSE) Log.v(TAG, "+++ ON CREATE +++"); } @Override public void onStart() { super.onStart(); if (VERBOSE) Log.v(TAG, "++ ON START ++"); } @Override public void onResume() { super.onResume(); if (VERBOSE) Log.v(TAG, "+ ON RESUME +"); } @Override public void onPause() { super.onPause(); if (VERBOSE) Log.v(TAG, "- ON PAUSE -"); } @Override public void onStop() { super.onStop(); if (VERBOSE) Log.v(TAG, "-- ON STOP --"); } @Override public void onDestroy() { super.onDestroy(); if (VERBOSE) Log.v(TAG, "- ON DESTROY -"); } }


Sé que su pregunta fue hace 6 meses, pero en caso de que alguien más tropiece con esta pregunta:

¿Estoy haciendo algo mal para poner mi actividad en el estado de pausa?

Sí es usted. Esta:

Presiono el botón de inicio (no el botón de retroceso) del emulador y lanzo otra aplicación, creyendo que esto imitaría la actividad de la Pausa ().

Presionar el botón de inicio llamará al método onPause() , pero como el botón de inicio hace que su actividad ya no sea visible, llamará al método onStop() (como mencionan Patriota y Milter).

Según la referencia del desarrollador de Actividades ( http://developer.android.com/guide/components/activities.html ) puede mostrar un cuadro de diálogo o simplemente poner el dispositivo en modo de suspensión.

Alternativamente, usted llama a una actividad que solo obstruirá parcialmente la actividad de la llamada. Así que llame a una actividad que crea una ventana con una vista de tamaño:

android:layout_width="100dp" android:layout_height="100dp"

Lo que no cubre toda la pantalla, por lo tanto, deja la actividad de llamada parcialmente visible, por lo que solo se llama al método onPause() la actividad de onPause() .

Clona esa actividad para que ambos tamaños de vista sean "match_parent" en lugar de "100dp" y llámalos y se llamará a los onPause() y onStop() de la actividad de llamada porque la actividad de llamada no será visible.

Por supuesto, puede haber excepciones, como si la actividad llamada provoca un bloqueo de la aplicación en cualquiera de sus onCreate() , onStart() o onResume() entonces el onStop() de la actividad de llamada no se llamará, obviamente, estoy Solo hablando del caso general aquí.


Si está emulando Android 4.x, puede controlar cómo el sistema maneja las actividades en segundo plano utilizando Configuración -> Opciones del desarrollador -> No mantener las actividades y el límite del proceso en segundo plano. Para versiones anteriores hay una aplicación llamada Dev Tools que contiene la misma configuración. Sin embargo, en condiciones de poca memoria, el sistema puede ignorar esas configuraciones y terminar su aplicación. Aumentar la cantidad de memoria asignada al emulador podría ayudar.

Además, si está reiniciando su aplicación desde Eclipse, el proceso anterior se interrumpirá en lugar de terminarlo con gracia.


onPause ():

"Si una actividad ha perdido el foco pero sigue siendo visible (es decir, una actividad nueva no transparente o de tamaño completo tiene el foco en la parte superior de su actividad), se detiene. Una actividad en pausa está completamente activa (mantiene todo el estado y "La información del miembro y permanece adjunta al administrador de ventanas), pero puede ser eliminada por el sistema en situaciones de memoria extremadamente baja".

onStop ():

"Si una actividad está completamente oculta por otra actividad, se detiene. Todavía conserva toda la información de estado y miembro, sin embargo, el usuario ya no la puede ver, por lo que su ventana está oculta y el sistema la anulará a menudo cuando la memoria se necesita en otros lugares ".

Tomado de la clase de actividad de referencia de Android: http://developer.android.com/reference/android/app/Activity.html