2011-01-27 15 views
5

Tengo actividad, que es guardar sus datos en caso de que el sistema decida matarlo mientras está en segundo plano. Por lo tanto, tengo onSaveInstanceState:Prueba del ciclo de vida de la actividad de Android

@Override 
protected void onSaveInstanceState(Bundle outState){ 
    outState.putString("value", "some_value"); 
} 

puedo comprobar si el objeto Bundle es nulo en onCreate:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    isRestarted=(savedInstanceState==null); 

¿Cómo se escribe el método de ensayo? Probé

public void testRecreate(){ 
    Instrumentation mInstr=this.getInstrumentation(); 
    mInstr.callActivityOnSaveInstanceState(mActivity, null); 
    mActivity.finish(); 
    mActivity=this.getActivity(); 
    assertEquals(false, mActivity.isRestarted); 
} 

pero parece estar mal.

Respuesta

0

Si no lo ha experimentado antes, valgo la pena al do this al menos una vez.

+0

http://developer.android.com/resources/tutorials/testing/activity_test.html => enlace roto :( – Macarse

+0

He pasado por esto pero mi problema parece ser un poco más complicado –

0

Cosas así podrían probarse fácilmente usando robolectric. ¡Echale un vistazo!

6

Puede utilizar algunas funciones ocultas de la API. En la configuración de la prueba, llame al método

android.app.ActivityManagerNative.getDefault().setAlwaysFinish() 

través de la reflexión (porque es una API oculta) y confirme que el valor se estableció con éxito utilizando

android.provider.Settings.System.getInt(getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0) 

A continuación, en la limpieza de prueba, de esta configuración de nuevo a falso

Habilitar la configuración AlwaysFinish hace que el sistema destruya las actividades tan pronto como ya no están en la pantalla, lo que activa inmediatamente el evento onSaveInstanceState. Para que este código funcione, necesitará los permisos ALWAYS_FINISH y WRITE_SETTINGS.

ver el código de la herramienta SetAlwaysFinish vinculado en este blog: How to test onSaveInstanceState and onRestoreInstanceState on a real device

+0

Gracias por tomar el momento de armar esto Theo. ¡Buen trabajo! – ohhorob

+0

No pude conseguir que setAlwaysFinish.apk funcione en Android 4.0.3. Se lanzó, pero marcar la casilla de verificación no tuvo ningún efecto. Solo una advertencia. Si onCreate NO es llamado después de que se supone que la actividad ha finalizado, setAlwaysFinish no hace el trabajo. – Nilzor

1

Para las pruebas manuales, esta rutina obras:

  1. Lanzamiento de la actividad que desea probar
  2. pulsó el botón de menú de inicio en su dispositivo (la actividad está detenida)
  3. Mate el proceso desde DDMS (la actividad sigue siendo not destroyed)
  4. Traer de vuelta a su aplicación de nuevo desde el recent apps list

Esto debería desencadenar onCreate nuevo en su actividad mientras no reiniciar toda la aplicación. Si no está guardando y cargando el estado correctamente, lo sabrá lo suficientemente pronto.

Cuestiones relacionadas