Android 4.4.2 – java.lang.RuntimeException: Realización de la parada de la actividad que no se reanuda
Estoy recibiendo esta excepción en un dispositivo 4.4.2. No reproducible en el dispositivo Android 4.3 o inferior.
La configuración es que tengo una actividad en el hogar (subclase de soporte ActionBarActivity
). La actividad de inicio comprueba una bandera booleana y, si es verdadera, inicia una actividad de pantalla de bienvenida (sí, idealmente la salpicadura viene antes de la actividad de inicio, pero supongamos que no puedo cambiarla para que funcione de esa manera por ahora).
- ¿Por qué AlertDialog.Builder (Context context) sólo acepta Actividad como parámetro?
- Calcula cuánto tráfico de red generan otras aplicaciones de Android
- Android: usando la animación predeterminada de la actividad para Fragmentos
- El servicio se crea de nuevo después de onTaskRemoved
- Mi aplicación se bloquea en modo horizontal
La pantalla de startActivityForResult
se inicia con startActivityForResult
, descarga algunas opciones de configuración del servidor y luego termina y devuelve el resultado a la actividad principal.
Lo curioso es que esto funciona bien en 4.3 y por debajo, pero en los dispositivos 4.4, obtengo la excepción anterior (traza de pila completa):
02-21 13:36:16.733 24409-24409/test.player E/ActivityThread﹕ Performing stop of activity that is not resumed: {test.player/test.ui.actvities.HomeActivity} java.lang.RuntimeException: Performing stop of activity that is not resumed: {test.player/test.ui.actvities.HomeActivity} at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3147) at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3234) at android.app.ActivityThread.access$1100(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1223) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method)
Basado en lo anterior, parece que onStop (porque lanzo la actividad splash en onCreate) se llama antes de onResume para la actividad de inicio.
¿Por qué esto está causando problemas en 4.4.x?
- ¿Reutilizar las actividades anteriores?
- Cómo utilizar el método onActivityResult de otra clase que no sea Activity
- Actualizar textview en la actividad de Fragment
- Repetición inesperada de "nombre del paquete" mientras se reanudaba en '' nombre del paquete '' Error en Android
- ¿Cómo obtener la actividad actual en la pantalla?
- ¿Puedo llamar a startActivity () desde dentro onResume ()?
- Volver a la pantalla de inicio después de terminar Actividad
- ¿Cómo regresar de la pantalla de preferencias a la actividad principal?
Eso no me parece bien. La actividad de splash sería ahora la actividad principal en la pila, por lo que el método de ciclo de vida de HomeActivity onStop sería llamado eventualmente. Coincidentemente, moví la llamada de startActivity
para la actividad de salpicadura de onCreate
a onResume
en onResume
, y el error desaparece.
El problema seguirá estando en todos los teléfonos HighEnd con 4.4.2 y superiores, incluyendo NEXUS 5, Samsumg s4 ya que onResume se llama, pero aún así está en fase de animación. Por lo tanto, si intenta iniciar una actividad en onResume el problema se replicará.
Poner su actividad de conmutación en un manejador método retrasado.
Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { switch (msg.what) { case 1: //Strat another Activity Here default: break; } return false; } });
Y en onResume llama esto.
handler.sendEmptyMessageDelayed(1, 1000);
Para ese momento usted puede mostrar el cargador o algo o bloquear la interacción del usuario
Simplemente llame al método onResume super antes de iniciar la nueva actividad:
super.onResume();
Yo estaba recibiendo esta excepción, incluso cuando se utiliza onResume()
, así que terminé sobreponiendo onPostResume()
y comenzar la actividad de allí, y la excepción se ha ido. No estoy seguro si esta es una solución ideal, pero aún así …
- Manejo del botón MENU que falta en las nuevas versiones de Android (3.x y superior)
- Obtener el elemento seleccionado de ListView enlazado con SimpleCursorAdapter