Los Procesos de Ejecución de Datos en Aplicaciones de Android

En Android, cada aplicación siempre se ejecuta dentro de un mismo proceso, incluyendo en dicho proceso todos los componentes de la misma, servicios y actividades. Es decir, cuando se inicia una aplicación, se ejecutará el primer componente de la misma y el sistema Android creará un nuevo proceso de Linux con un único subproceso asociado para dicha aplicación. A este subproceso generado por defecto se le conoce como hilo principal de ejecución. Cuando posteriormente se inicien nuevos componentes, estos se acoplarán al mismo proceso de aplicación y se ejecutarán en el mismo subproceso descrito anteriormente. Sin embargo, este comportamiento por defecto es configurable, de manera que se puedan generar varios procesos y subprocesos, o hilos, asociados a la ejecución de una aplicación.

El hilo o subproceso principal de una aplicación es muy importante, dado que es el encargado de manejar los eventos de interacción con el usuario y la interfaz gráfica de la aplicación. Además, este hilo principal también es generalmente el proceso encargado de manejar el kit de interfaz de usuario de Android y, por ello, suele recibir el nombre de subproceso de interfaz de usuario. Sin embargo, no es de obligado cumplimiento que el hilo principal maneje la interfaz de usuario.

Por defecto, todos los nuevos componentes de la aplicación que sean necesitados serán ejecutados en el hilo principal. Esto puede suponer un problema cuando se ejecute una operación de uso intensivo y larga duración, ya que podría bloquear la interacción con el usuario. En este caso, Android mostraría el típico mensaje: “La aplicación no responde”.

Es debido a esto por lo que se recomiendan dos reglas respecto al hilo principal de un proceso:

  • No se debe bloquear el hilo principal.
  • Todas las operaciones de interfaz gráfica se realizan en el hilo principal.

Para solucionar los problemas anteriores, Android permite crear y administrar nuevos hilos para operaciones diferentes. De esta manera, se introduce el multithreading, o concurrencia en la ejecución de hilos. En Android, se pueden diferenciar dos tipos de hilos o subprocesos:

  • Subprocesos asociados a la vida de una actividad o servicio: se vinculan al ciclo de vida de la actividad que están ejecutando, y finalizan tan pronto como dicha actividad es destruida. Generalmente, un uso
  • Subprocesos no asociados a la vida de una actividad o servicio: pueden continuar su ejecución más allá del ciclo de vida de una actividad.

Sin embargo, la inclusión de nuevos hilos puede suponer un aumento en la complejidad de la ejecución de una aplicación. Para ello, Android incorpora un mecanismo de intercomunicación entre procesos.

Por último, cuando el sistema Android detecta que los recursos disponibles son bajos y se requieren para la ejecución de otro proceso de más importancia, puede finalizar la ejecución de un proceso para liberar dichos recursos. Como se vio anteriormente, dicha finalización de procesos para liberar recursos se realiza en función de una jerarquía de prioridades en la que se sitúa cada proceso. Adicionalmente, Android nunca finalizará un proceso que se encuentra ejecutándose en primer plano en el instante de tiempo actual.

El ciclo de vida de un proceso se define como el espacio de tiempo que transcurre desde que dicho proceso es creado hasta que finalmente es destruido.

En el sistema operativo Android, el ciclo de vida de un proceso se define por su transición entre una serie de estados:

  • Estado Starting: Este estado se inicia el proceso. Ocurre cuando se hace uso de la llamada de sistema “onCreate()”.
  • Estado Running: En este estado, el proceso tiene el foco principal de ejecución, es decir, mientras un proceso se encuentra en este estado, se trata de un proceso en primer plano. Este estado se inicia cuando se realiza la llamada “onStart()”, “onResume()” u “onRestart()”.
  • Estado Paused: Una vez se utiliza la llamada “onPause()”, un proceso pasa al estado de pausa. En este estado, el proceso continúa siendo visible para el usuario, pero deja de abarcar el foco de atención.
  • Estado Stopped: Una vez un proceso alcanza este estado, deja de ser visible para el usuario, y, por tanto, queda catalogado como proceso en segundo plano. Un proceso se considera en este estado cuando se ha invocado la llamada “onStop()”.
  • Estado Destroyed: Este estado denota el final del ciclo de vida de un proceso. Cuando el proceso es destruido, se liberan todos los recursos asociados al mismo. Para destruir un proceso, se utiliza la llamada “onDestroy()”.

Podemos denotar, de igual manera, el ciclo de vida de un proceso como el espacio de tiempo que transcurre desde que se invoca la llamada “onCreate” hasta que se hace lo propio con “onDestroy”. Además, el espacio de tiempo que un proceso permanece visible será el correspondiente entre las llamadas “onStart” y “onStop’; y el tiempo entre el primero y “onPause()” denotará el tiempo que permanece catalogado como proceso en primer plano.

Es importante destacar que un proceso únicamente puede acceder al estado Destroyed desde el estado Paused o Stopped. Esto quiere decir, que el sistema Android nunca finalizará un proceso, si se produjese una situación de escasez de recursos, que se encuentre ejecutándose en primer plano. 

07 July 2022
close
Tu email

Haciendo clic en “Enviar”, estás de acuerdo con nuestros Términos de Servicio y  Estatutos de Privacidad. Te enviaremos ocasionalmente emails relacionados con tu cuenta.

close thanks-icon
¡Gracias!

Su muestra de ensayo ha sido enviada.

Ordenar ahora

Utilizamos cookies para brindarte la mejor experiencia posible. Al continuar, asumiremos que estás de acuerdo con nuestra política de cookies.