Creación de
procesos
Jose Manuel Castillo Perez
Rafael González Jiménez
Indice
Introducción
Gestión de procesos
Creación de hebras
Procesos de cálculo
Mensajes
Service en Android
Conclusión
Introducción
Sistema Operativo basado en el kernel de
Linux, gratuito y multiplataforma. Este sistema
está diseñado principalmente para dispositivos
móviles con pantalla táctil.
Permite programar aplicaciones en una
variación de un lenguaje de programación
muy conocido como es Java y dicha
variación se llama Dalvik.
Proceso Programa que se encuentra en ejecución, es decir,
un conjunto de instrucciones que se encuentran actualmente en ejecución en nuestro computador.
Estos procesos son gestionados por el Sistema Operativo y están formados por:
Instrucciones que van a ser ejecutadas por el microprocesador.
Los valores de los registros en un momento dado.
Memoria que ha reservado para su ejecución.
Otra información que permite al Sistema Operativo la planificación de dicho proceso.
Proceso
Para crear un proceso existen 4 formas:
Durante el arranque del sistema.
En la ejecución de una llamada al sistema
para la creación de un proceso.
Una petición del usuario para crear un
proceso.
El inicio de un trabajo por lotes.
Proceso
Los posibles estados por los cuales puede pasar un proceso son:
Ejecución: el proceso está haciendo uso del procesador.
Bloqueado: el proceso no puede ejecutarse hasta que ocurra un evento.
Listo: el proceso ha terminado de ejecutarse y deja libre el procesador.
Gestión de procesos
Gestión de procesos
Cada aplicación se ejecuta en su mismo proceso y todos los componentes de la aplicación se ejecuten en ese proceso, de manera personalizada.
Todas las operaciones lentas y de bloqueo en una actividad se debe hacer en un nuevo hilo, para evitar la ralentización de la interfaz de usuario
Gestión de procesos
Terminación:
Una aplicación puede llamar a un método
para matar procesos que tiene permiso para
matar.
Android tiene una cola utilizada menos
recientemente que realiza un seguimiento de
las aplicaciones que no se han utilizado. Si el SO
empieza a quedarse sin memoria, matará al menos la aplicación utilizada recientemente.
Gestión de procesos PRIMER PLANO PROCESO
EL proc se requiere para lo que está haciendo el usuario ahora.
PROCESO VISIBLE
Puede afectar a lo que el usuario ve en pantalla
SERVICIO DE PROCESO
Hacen cosas que al usuario le interesa, pero no tiene nada que ver con lo que ve en pantalla.
ANTECEDENTES PROCESOS
No tienen impacto directo en la experiencia del usuario, y el sistema los puede matar cuando quiera
PROCESO DE VACIO
No cumple ninguno de los componentes de aplicaciones activas. La única razón para mantenerlo, es con fines de almacenamiento en caché para mejorar un determinado tiempo.
Gestión de procesos
Gestión de procesos
Creación de hebras
Existen 2 opciones:
- Clase Thread de Java.
- Clase AsyncTask.
AsyncTask
AsyncTask es una clase abstracta que
proporciona Android y nos ayuda a
utilizar hilos correctamente. Esta clase nos
permite crear hilos secundarios para no
bloquear el hilo principal y mostrar el
resultado en el hilo principal.
AsyncTask class MiTarea extends AsyncTask<Parametros, Progreso, Resultado> {
@Override protected void onPreExecute() {
…
}
@Override protected Resultado doInBackground(Parametros... par) {
…
}
@Override protected void onProgressUpdate(Progreso... prog) {
…
}
@Override protected void onPostExecute(Resultado result) {
…
}
}
AsyncTask La funcionalidad de cada uno de los métodos anteriores es:
onPreExecute(): se utiliza para configurar la tarea y mostrar en la interfaz de usuario que ha empezado la tarea con el nuevo hilo.
doInBackground(Parametros…): aquí realizamos la tarea que ejecuta el hilo.
onProgressUpdate(Progress…): mostramos el progreso de la tarea al usuario y se ejecuta en el hilo principal.
onPostExecute(Result): aquí mostramos el resultado de la tarea en la interfaz de usuario, ya que la tarea que se ejecutaba en el nuevo hilo ha terminado.
AsyncTask
MiTarea tarea = newMiTarea();
tarea.execute(p1, p2, p3);
AsyncTask
AsyncTask
AsyncTask
Operaciones simples:
Ejemplos reales
Operaciones simples
Operaciones simples
Operaciones simples
Función suma
public void SUMA(View view) { EditText txtOp1 = (EditText) findViewById(R.id.operator1); EditText txtOp2 = (EditText) findViewById(R.id.operator2); int result = Integer.parseInt(txtOp1.getText().toString()) + Integer.parseInt(txtOp2.getText().toString()); TextView lblRes = (TextView) findViewById(R.id.lblResult); lblRes.setText(Integer.toString(result)); }
Operaciones simples
Mensajes
android handler message
Mensajes
Los Handlers implementan un mecanismo
de paso de mensajes entre threads
Mensajes Creación de una barra de progreso:
1º Declaración al inicio del handler private Handler puente = new Handler() { @Override public void handleMessage(Message msg) { } };
2º Le pasamos un mensaje y creamos progressbar progressDialog = new ProgressDialog(EjemplotutoActivity.this); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setMessage("Loading..."); progressDialog.setMax(10000); progressDialog.setProgress(0); progressDialog.setCancelable(false); progressDialog.show();
Mensajes 3º Dentro de un thread que creemos, vamos
pasando el contador de la barra:
Thread th1 = new Thread(new Runnable() { }
4º Pasar el contador al progressBar por nuestro handler:
Message msg = new Message();
msg.obj = contador;
puente.sendMessage(msg);
5º Recibir el handler en la progressBar dentro de la función handleMessage:
progressDialog.setProgress((Integer)msg.obj);
Mensajes
“Service” en Android
Componente que trabaja en segundo plano y
no es visible explícitamente al usuario. Apoyo
multitarea real para Android, ya que se puede
ejecutar en su propio proceso.
Declaración:
<service android:name="yourclasss"> </service>
“Service” en Android Podemos especificar que nuestro Service se ejecute en
un proceso separado con el atributo process :
android:process=":process_description“
El prefijo dos puntos delante del nombre indica al sistema que el servicio es privado para la aplicación que lo declara. Si no usamos los dos puntos de prefijo, el Service sería un proceso global:
<service
android:name="Servicio"
android:process=":my_process"
android:icon="@drawable/icon"
android:label="@string/service_name">
</service>
Conclusión
Para finalizar, podemos ver como está
basado el SO android en el kernel de
linux, ya que en cuanto a creación de
procesos, y gestión de los mismos es
similar a sistemas unix.
Preguntas
FIN
José Manuel Castillo
Rafael González
Top Related