La actividad se reinicia en Force Close
Tengo una aplicación con una sola actividad de raíz. Recientemente he tenido que traer a mi atención que cualquier tipo de Fuerza Cerrar en mi Actividad resultados en que se reinicie y no tengo ni idea de por qué esto podría suceder. Si forzo una excepción no detectada o utiliza la opción 'larga copia para forzar cierre', ambas resultan en lo mismo.
Mi única conjetura habría sido alguna forma de peculiaridad relacionada con referencias retenidas a alguna parte de la Actividad, solo que no tengo ninguna fuera de algunas entradas de WeakReference en el nivel de Aplicación.
- Matar la aplicación después del accidente
- Detener o matar un servicio
- Cómo matar a mi propia actividad - la manera dura
- Android tarea matar
- Proceso de eliminación de Android
Entradas relevantes del logcat:
05-25 08:25:49.137: INFO/ActivityManager(18449): Displayed uk.co.randomicon.rstb/.TreeBuilderActivity: +8s82ms 05-25 08:25:54.222: DEBUG/dalvikvm(18546): GC_EXPLICIT freed 12K, 57% free 3640K/8327K, external 8323K/10136K, paused 72ms 05-25 08:25:55.373: WARN/InputManagerService(18449): Got RemoteException sending setActive(false) notification to pid 19122 uid 10069 05-25 08:25:59.217: DEBUG/dalvikvm(18646): GC_EXPLICIT freed 128K, 48% free 2980K/5703K, external 0K/0K, paused 67ms 05-25 08:26:00.238: DEBUG/dalvikvm(18991): GC_CONCURRENT freed 343K, 51% free 2794K/5639K, external 303K/532K, paused 3ms+3ms 05-25 08:26:02.950: INFO/Process(18449): Sending signal. PID: 19554 SIG: 9 05-25 08:26:02.980: INFO/ActivityManager(18449): Process uk.co.randomicon.rstb (pid 19554) has died. 05-25 08:26:02.990: ERROR/InputDispatcher(18449): channel '40a16ec8 uk.co.randomicon.rstb/uk.co.randomicon.rstb.TreeBuilderActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x8 05-25 08:26:02.990: ERROR/InputDispatcher(18449): channel '40a16ec8 uk.co.randomicon.rstb/uk.co.randomicon.rstb.TreeBuilderActivity (server)' ~ Channel is unrecoverably broken and will be disposed! 05-25 08:26:02.990: INFO/WindowManager(18449): WINDOW DIED Window{40a16ec8 uk.co.randomicon.rstb/uk.co.randomicon.rstb.TreeBuilderActivity paused=false} 05-25 08:26:03.010: WARN/WindowManager(18449): Failed looking up window 05-25 08:26:03.010: WARN/WindowManager(18449): java.lang.IllegalArgumentException: Requested window android.os.BinderProxy@40c774e0 does not exist 05-25 08:26:03.010: WARN/WindowManager(18449): at com.android.server.WindowManagerService.windowForClientLocked(WindowManagerService.java:8177) 05-25 08:26:03.010: WARN/WindowManager(18449): at com.android.server.WindowManagerService.windowForClientLocked(WindowManagerService.java:8168) 05-25 08:26:03.010: WARN/WindowManager(18449): at com.android.server.WindowManagerService$WindowState$DeathRecipient.binderDied(WindowManagerService.java:7026) 05-25 08:26:03.010: WARN/WindowManager(18449): at android.os.BinderProxy.sendDeathNotice(Binder.java:385) 05-25 08:26:03.010: WARN/WindowManager(18449): at dalvik.system.NativeStart.run(Native Method) 05-25 08:26:03.010: INFO/WindowManager(18449): WIN DEATH: null 05-25 08:26:03.020: INFO/ActivityManager(18449): Start proc uk.co.randomicon.rstb for activity uk.co.randomicon.rstb/.TreeBuilderActivity: pid=19565 uid=10069 gids={1015}
¡Cualquier idea donde incluso comenzar a empujar sería agradecido recibido!
EDIT: Esto fue causado por mi configuración de android: stateNotNeeded = "true" en mi Manifiesto. Aunque no necesito el estado, esto hizo que Android decidiera que era mejor relanzar mi aplicación en el supuesto de que el usuario desearía eso.
- La notificación sigue en la barra después de matar al servicio
- Cómo matar un proceso que no se está ejecutando en Android
- Obtener el PID de un proceso para matarlo, sin saber su nombre completo
- Mi Huawei mata a mi aplicación wakelock android
- Alternativa al método finish () para la clase de servicio? Matarlo muerto
- ¿Cómo matar a un servicio de Android?
Aquí hay algunas informaciones útiles:
En cuanto a cuándo una actividad se reinicia – si el proceso que ejecuta la actividad de primer plano desaparece, el sistema tirará esa actividad si no tiene un estado guardado válido para ella (típicamente significa que está pausado y ha dado al sistema la Resultado de onSaveInstanceState antes de la pausa). Una vez que haya decidido si deshacerse de esa actividad, reanudará cualquier actividad que esté ahora en la parte superior de la pila. Si esta es una de sus actividades – ya sea porque tiene otra detrás de la que se estrelló, o la que se estrelló fue de alguna manera el estado de pausa establecido – entonces se iniciará el proceso de nuevo para mostrar que la actividad superior .
Esto puede deberse a que llama a una API del sistema que no está disponible en el dispositivo de destino. Me encontré con un problema similar y luego traté de llamar a ActivityManager.MemoryInfo.totalMem en un dispositivo 4.0.x. No obtuve errores de compilación como estaba apuntando 4.2.2 y ActivityManager.MemoryInfo.totalMem fue agregado en API16 (4.1)
Si la aplicación tiene android: persistent = "true" en el manifiesto, se reiniciará cuando se mata.