OnCreate () se llama cuando se vuelve a abrir desde una tarea reciente después de cambiar la configuración del permiso

El título de la pregunta puede sonar complicado pero aquí está mi situación.

Tengo un fragmento de mapa dentro de una actividad. Sencillo. Activar el permiso de almacenamiento para permitir la visualización de mapa, funciona bien. Fondos de la aplicación mediante el botón Inicio, a continuación, desactive el permiso de almacenamiento y abra la aplicación de la tarea reciente, la aplicación se bloquea.

El problema es en lugar de llamar onResume () de la actividad del host, onCreate () se llama en la actividad del host, así como onCreateView () del fragmento de mapa. Así está lanzando Excepciones.

Parece que el proceso de la aplicación se pierde cuando se cambia el permiso y, por tanto, se recrea la actividad.

09-24 14:42:55.071: E/AndroidRuntime(12918): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 09-24 14:42:55.071: E/AndroidRuntime(12918): Caused by: java.lang.NullPointerException: Attempt to write to field 'int android.support.v4.app.Fragment.mNextAnim' on a null object reference 09-24 14:42:55.071: E/AndroidRuntime(12918): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:718) 09-24 14:42:55.071: E/AndroidRuntime(12918): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489) 09-24 14:42:55.071: E/AndroidRuntime(12918): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:548) 

Desde super.onStart () de la Actividad

La solución viable ahora es simplemente llamar a getSupportFragmentManager().popBackStackImmediate(); In onCreate () de la Actividad para evitar que se intente recrear el fragmento de mapa.

PopBackStack () no funcionará en este caso, ya que es asíncrono.

Probablemente un poco tarde, todavía podría ayudar a otros en el futuro 🙂

Debería comprobar si savedInstanceState es null que se pasa a onCreate(Bundle savedInstanceState) . Si sólo es null , inicie el Fragment manera:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout_file); if (savedInstanceState == null) { // do fragment transactions here } } 

Estaba teniendo problemas similares con el cambio dinámico en el permiso de la aplicación. Después de algunos cavar lo que entendí podría ser útil para usted también.

Cambiar el permiso causa la terminación de su aplicación por el sistema y ahora si abre su aplicación desde la pantalla de resumen, se reiniciará su aplicación, que es la razón principal de su bloqueo, ya que podría estar realizando una operación en el objeto fragmento, que es nulo ahora .

Un punto importante a destacar aquí es que antes de que el estado del fragmento de terminación se guarde en el objeto savedinstance.

Para detener el bloqueo debe obtener instancia de fragmento utilizando esta línea de código –

 mapFragment = (MapFragment)getSupportFragmentManager().findFragmentByTag("MAP FRAG"); 

Aquí "MAP FRAG" es una etiqueta que tienes que dar a tu fragmento.

Compartir si tienes alguna confusión.

  • Permiso personalizado con intención implícita
  • Escribir almacenamiento externo no funciona hasta que reinicie la aplicación en Android M
  • ¿Por qué mi BroadcastReceive causa una denegación READ_PRIVILEGED_PHONE_STATE en M?
  • ¿Qué debo hacer: esto requiere android.permission.INTERACT_ACROSS_USERS_FULL
  • ActivityManager <user-permission> permiso no funciona
  • Android Marshmallow - cómo saber "Nunca preguntar de nuevo" se comprueba antes
  • No todos los permisos del grupo de permisos ACCOUNT se conceden automáticamente
  • ¿Por qué se ha agregado el permiso READ_PHONE_STATE?
  • El instalador de paquetes se bloquea en Android M después de solicitar permiso READ_SMS
  • ¿Cómo enumeramos todos los permisos definidos?
  • Marshmallow: No se puede ejecutar Settings.System.canWrite (Context) desde un servicio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.