2010-11-19 8 views

Respuesta

8

Esta conversación parece responder a ella : http://groups.google.com/group/android-developers/browse_thread/thread/f47af26b696af2e2. Busque la publicación que comienza con "Sí y no" y las pocas anteriores.

La respuesta está en los positivos: sí, tras el reinicio de una Actividad cerrado por el sistema operativo, getIntent() devolverá un Intención con los mismos extras que el original.

Sin embargo, si algún experto en Android pudiera confirmarlo, me gustaría saberlo. :)

0

Sobear,

La respuesta para eso es "no, no lo hace". Hay varias razones diferentes para esto. Primero, repitamos cómo funciona una actividad (sé que lo sabes, pero estoy ilustrando un punto).

  1. Para iniciar una actividad, se crea una intención. Esta intención puede ser desde un icono de la aplicación en la pantalla de inicio, desde un componente de su aplicación que se está ejecutando actualmente, o incluso desde otro componente de otra aplicación, siempre que tengan permiso para iniciarlo.

  2. El intento se envía a Android, y Android intenta resolverlo enviándolo a una aplicación, o preguntando al usuario si no se puede resolver por sí mismo.

  3. Cuando se inicia la aplicación, se mantiene en la intención que la inició para permitir las comprobaciones de seguridad, el seguimiento posterior, etc. Permite al desarrollador y al usuario asegurarse de que esto es lo que realmente quieren hacer ... Esta intención permanece durante todo el ciclo de vida de la actividad y cualquier otra cosa a la que la actividad lo transfiera.

  4. El usuario hace algunas cosas, se distrae y pasa a otras actividades. La aplicación continúa hasta que la memoria sea baja.

  5. La memoria baja y Android mata la actividad. La actividad pierde la intención (a menos que se haya guardado de alguna manera).

  6. El usuario ve que la actividad murió y decide reiniciar. Android crea un nuevo intento para iniciar la actividad -> volver al paso 1.

Dado que era necesario un nuevo intento de reiniciar la aplicación, la vieja intención ya no es la forma adecuada para la actividad. En cuanto a si se recoge o no en Garbage, no estoy seguro de cuándo sucede esto, pero no es accesible. Si le preocupa almacenar sus Extras, solo hay una forma de hacerlo (varias implementaciones posibles, por supuesto). La intención y los extras deben almacenarse de alguna manera. Esto no afectará la función getIntent(), pero PODRÍA crear una función getOriginalIntent() personal para basarla. A partir de ahí, hay una serie de opciones ... Por ejemplo, se puede reiniciar la actividad con la intención original y luego getIntent() que iba a funcionar ...

FuzzicalLogic

+0

Pero he probado si la actividad se cancela el sistema operativo guarda automáticamente los extras y los devuelve con la llamada 'getIntent(). GetExtras()' –

0

Bien, siempre puedes hacer un experimento simple tú mismo, por girando la bandera "no mantener actividades" en, en las opciones de desarrollador.

Si esa marca está activada, cada vez que salga de la aplicación (por ejemplo, haga clic en el botón de inicio), el sistema operativo matará la actividad y cuando vuelva a su aplicación, se volverá a crear la actividad anterior.

Mis experimentos me dijeron que getIntent() siempre tendrá los mismos datos después de la recreación de la actividad.

Cuestiones relacionadas