2011-06-24 12 views
5

Estoy escribiendo una prueba que pone en marcha mi actividad principal y, después de eso, lo puse en el fondo con el lanzamiento de la pantalla de inicio con el siguiente propósito:startActivitySync cuelga al poner una actividad de nuevo al primer plano

Intent intent= new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

Después de eso, intento volver a poner la actividad de mi aplicación en primer plano utilizando una intención similar a la anterior (no tiene el indicador CATEGORY_HOME y, en cambio, agrego el nombre y el paquete de la actividad). Como necesito asegurarme de que la actividad de mi aplicación se inició correctamente, estoy usando el método "startActivitySync" de Instrumentation.

Cuando ejecuto la prueba, veo que la aplicación se está poniendo en segundo plano con éxito y luego vuelve al primer plano, pero la ejecución de prueba nunca termina. Se cuelga para siempre en el método "startActivitySync". Alguna idea de por qué esto está sucediendo?

Respuesta

0

En lugar de utilizar este constructor:

Intent intent = new Intent(String action); 

prueba este:

Intent intent = new Intent(Context packageContext, Class<?> cls): 

me encontré con un problema similar con startActivitySync(Intent) colgante, y esto resuelto por mí. Funcionó bien en la primera prueba, pero falló en pruebas posteriores en la misma clase. ¿Por qué? No lo sé.

1

En mi experiencia:

public testOne(){ 
MyActivity first = startActivitySync(...); 
first.finish(); 
MyActivity second = startActivitySync(...); 
} 

public testTwo(){ 
MyActivity first = startActivitySync(...); 
... 
} 

, TESTONE() tendrá éxito, pero
testTwo() va a colgar en "startActivitySync".

solución sugerida:
Cleanup sus actividades iniciadas al final de cada prueba, por ejemplo:

public testOne(){ 
MyActivity first = startActivitySync(...); 
first.finish(); 
MyActivity second = startActivitySync(...); 
second.finish(); 
} 

public testTwo(){ 
MyActivity first = startActivitySync(...); 
first.finish(); 
} 
0

hay una gran cantidad de este tipo de preguntas, pero casi todos los que responden sugieren para terminar una actividad que supongo en la mayoría de los casos no funciona.

Si su actividad no termina, solo significa que alguna operación de IU continúa ejecutándose. Y en realidad podría significar que algo está mal con tu actividad. Por ejemplo recientemente me enfrentaba a un problema similar y descubrí que una animación no estaba adecuadamente detuvo:

Animation anim = AnimationUtils.loadAnimation(getContext(), R.anim.rotate_infinite_clockwise); 
view.startAnimation(anim); 

Así que el método más directo de la solución del problema es deshabilitar puntos de vista de uno en uno.

Cuestiones relacionadas