ANR en com.android.launcher después de retroceder

Cuando instalo mi aplicación en ciertos dispositivos (parece ser 4.4.4 y posterior) a veces veo el siguiente ANR en com.android.launcher después de los siguientes pasos:

  1. De la Actividad A, iniciar la Actividad B
  2. En la Actividad B, presione la tecla de retroceso del sistema y en el método onBackPressed () de la Actividad B vuelva a iniciar la Actividad A (el código está debajo).
  3. La tecla de respaldo del sistema permanece en estado presionado durante 5 segundos, la pantalla se vuelve negra, mi aplicación se cierra y aparece Launcher. La investigación de los registros muestra una ANR en el proceso del lanzador.

ANR en com.android.launcher (com.android.launcher / com.android.launcher2.Launcher) Motivo: Se ha agotado el tiempo de espera de envío de la entrada (espera porque ninguna ventana tiene foco pero hay una aplicación enfocada que eventualmente puede agregar una ventana cuando termine empezando.)

Observe que la ANR se está produciendo en com.android.launcher (no en mi aplicación).

Por cierto, no estoy haciendo una operación costosa en mis métodos onBackPressed / onPause / onStop.

Los registros también muestran que onBackPressed () no se invoca cuando se produce la ANR – comportamiento muy extraño como se puede ver aquí:

## User starts Activity A from Android Launcher D/Activity A: onResume() D/Activity A: onClick(): start Activity B D/Activity A: onPause() D/Activity B: onResume() ## User taps system back key (and onBackPressed() launches Activity A) D/Activity B: onBackPressed(): start Activity A D/Activity B: onPause() D/Activity A: onResume() D/Activity A: onClick(): start Activity B D/Activity A: onPause() D/Activity B: onResume() ## User taps system back key (but onBackPressed() is not invoked. Instead an ANR occurs) I/InputDispatcher( 557): ANR in com.android.launcher D/Activity B: onPause() 

Aquí está mi método onBackPressed ():

 public void onBackPressed() { Intent intentStartRoot = new Intent().setComponent(new ComponentName(this, ActivityHome.class)); intentStartRoot.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intentStartRoot); } 

Este es probablemente un error en el Android Framework. He probado alrededor de 12 dispositivos hoy en día y me di cuenta de que este error se produce de forma confiable en los dispositivos de tipo Nexus que ejecutan estas versiones de Android:

  • 4.4.4
  • 5.0.1
  • 5.0.2

Curiosamente, los dispositivos Samsung que ejecutan las mismas versiones de Android no muestran el problema. Android 5.1 y posterior parece ser mejor en que no veo más ANRs en com.android.launcher; Sin embargo, ahora veo ANRs en com.google.android.googlequicksearchbox.

He trabajado en torno a este problema después de darse cuenta de que mi actividad fue sobreescribir onBackPressed () sin invocar super.onBackPressed (). Después de añadir super.onBackPressed (), los ANR se fueron. Pero esto no es una solución completa porque llamar a super.onBackPressed () terminó mi Actividad, que no quiero.

Espero que esto ayude a alguien.

Consulte: El uso de FLAG_ACTIVITY_REORDER_TO_FRONT para cambiar entre las actividades de la interfaz de usuario permanentemente en ejecución conduce al error "sin foco de ventana"

Consulte: Problema de Android-L: onBackpressed cuando se utiliza FLAG_ACTIVITY_REORDER_TO_FRONT para iniciar la actividad anterior y se congela la aplicación por algún tiempo

Además, encontré una entrada de error en el sitio de Google que parece relacionada: https://code.google.com/p/android/issues/detail?id=91534

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.