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.
- Desactivar los permisos de la aplicación mediante programación
- ¿Cuándo debo usar el permiso ACCESS_COARSE_LOCATION?
- ¿Qué permiso debe requerir mi receptor SMS de manejo de entrada del sistema?
- Método checkSelfPermission no funciona en targetSdkVersion 22
- Apagado del dispositivo Android - quiere "ShutdownThread-> shutdown ()" no "su reboot -p"
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
- Descartar diálogo de solicitud de permiso en Marshmallow utilizando el botón Atrás
- La aplicación se bloquea con SecurityException en Android M
- ¿El aviso de la aplicación de Marshmallow revoca la notificación?
- Cómo eliminar el archivo de almacenamiento externo en android 5
- Android 5 (HTC) EACCES (Permiso denegado)
- Android revoca el permiso al inicio de cada prueba
- ¿Cómo evitar escribir código repetitivo duplicado para solicitar permisos?
- Mi aplicación para Android, de repente, requiere permisos no establecidos en AndroidManifest.xml. ¿Por qué?
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.
- Las notificaciones de envío de GCM no funcionan si la aplicación está cerrada en algunos dispositivos
- El cuadro de diálogo del sistema de pruebas de Calabash muestra e interactúa con él