android - ultima - music tag editor apk
¿Ocurre el borrado automático de tareas en las versiones modernas de Android? (1)
¡Gran pregunta, después de un poco de buceo desde la fuente, la respuesta ciertamente me sorprendió!
Un vistazo rápido a las fuentes de Android parece proporcionar la respuesta. Comencemos mirando hacia atrás en Android 2.2 en ActivityManagerService.java . Observe alrededor de la línea 186 una constante definida llamada ACTIVITY_INACTIVE_RESET_TIME
que se establece en 30 minutos.
// How long until we reset a task when the user returns to it. Currently
// 30 minutes.
static final long ACTIVITY_INACTIVE_RESET_TIME = 1000*60*30;
Mire un poco más lejos para el método resetTaskIfNeededLocked()
alrededor de la línea 7021 y verá este valor comprobado para determinar si la tarea debe reiniciarse antes de iniciarse.
Avance rápido a las fuentes de Android 4.3 y el código se ha movido a ActivityStack.java que se llama desde ActivityManagerService, pero la estructura básica es la misma. Esta vez, la constante se define alrededor de la línea 125:
// How long until we reset a task when the user returns to it. Currently
// disabled.
static final long ACTIVITY_INACTIVE_RESET_TIME = 0;
El mismo método resetTaskIfNeededLocked()
se encuentra alrededor de la línea 1973, y puede ver que ahora verifica si el valor es mayor que cero antes de aplicar la misma verificación de tiempo de espera para borrar el estado de la tarea. Tenga en cuenta, sin embargo, que este método sigue verificando FLAG_ALWAYS_RETAIN_TASK_STATE
, por lo que este indicador todavía puede usarse para proteger un estado claro, pero parece que con el control externo desactivado este código nunca se ejecutará.
En general, esto parece una evidencia bastante convincente de que la función se ha deshabilitado efectivamente en AOSP para versiones posteriores de Android. No veo medios externos (a través de las propiedades del sistema, etc.) para que este valor se vuelva a habilitar por dispositivo a menos que el fabricante reconstruya el código con un valor agregado aquí ... pero eso no es común. La mayoría de los ODM se adhieren a las propiedades de configuración en XML o propiedades del sistema que pueden controlar a través de una superposición.
Entonces, si bien técnicamente la función no se ha "eliminado", me parece que la documentación ya no es correcta en términos de que se active automáticamente después de un retraso.
De acuerdo con la documentación de Android, el sistema borrará una tarea (finalice todas las Actividades anteriores a la que lanzó la tarea) que el usuario considere que han abandonado:
https://developer.android.com/guide/components/tasks-and-back-stack.html#Clearing
Si el usuario deja una tarea por mucho tiempo, el sistema borra la tarea de todas las actividades excepto la actividad raíz. Cuando el usuario vuelve a la tarea nuevamente, solo se restaura la actividad raíz. El sistema se comporta de esta manera porque, después de un período de tiempo prolongado, es probable que los usuarios hayan abandonado lo que estaban haciendo antes y vuelvan a la tarea para comenzar algo nuevo.
https://developer.android.com/guide/topics/manifest/activity-element.html#always
Normalmente, el sistema borra una tarea (elimina todas las actividades de la pila sobre la actividad raíz) en ciertas situaciones cuando el usuario vuelve a seleccionar esa tarea desde la pantalla de inicio. Normalmente, esto se hace si el usuario no ha visitado la tarea durante un período de tiempo determinado, como 30 minutos.
Este comportamiento se puede reproducir fácilmente en dispositivos que ejecutan Gingerbread y versiones anteriores. Inicie una aplicación y cree un historial anterior, luego presione el botón de inicio y espere media hora. Vuelva a iniciar la aplicación desde la pantalla de inicio y el estado se ha borrado como si estuviera iniciando una nueva tarea. Perfecto.
Sin embargo, en los dispositivos que ejecutan ICS y superiores, parece que no puedo reproducir este comportamiento en absoluto, incluso después de que una tarea haya estado inactiva después de muchas horas o días. Cuando se reinicia una aplicación desde la pantalla de inicio, la tarea está siempre en el estado en que la dejé.
Suponiendo que la documentación sea correcta, ¿en qué condiciones las versiones modernas de Android (API 14+) borrarán automáticamente una tarea?
Si el comportamiento ha cambiado y la documentación está desactualizada, ¿cuál es el propósito del atributo alwaysRetainTaskState
para <activity/>
? ¿Se cambió el valor predeterminado a "true"
o este atributo está en desuso?
Nota: no estoy hablando aquí sobre la gestión del ciclo de vida del proceso de Android, que dependerá de los recursos del dispositivo. La eliminación de un proceso debe ser transparente para el usuario de todos modos y no afecta el estado de la tarea.