Primero, recordar que las aplicaciones Android se escriben en lenguaje de programación Java.
Anteriormente hablamos de que las aplicaciones tienen unos componentes; pues bien, en el caso de los proveedores de contenidos, se activan cuando son llamados por un ContentResolver; y en el caso de los otros tres componentes -actividades, servicios y receptores de difusión-, son activados por mensajes llamados Intents (intenciones). Intent es un objeto que contiene el contenido del mensaje (por ejemplo: llamar a una actividad para que realice algo, como editar  texto, presentar una imagen,...).
 
Los proveedores de contenido están activos mientras responden a la solicitud de un ContentResolver, y los receptores de difusión, mientras responden a un mensaje de difusión; por lo que, no hace falta cerrar estos componentes.
Por el contrario, las actividades (activities) proporcionan la interfaz del usuario y, al igual que los servicios, pueden permanecer activos durante mucho tiempo. Por ello, Android tiene medios para ir apagando de forma ordenada, tanto las actividades como los servicios.
  • Una actividad puede apagarse llamando a su método  Finish(). Una actividad puede apagar otra actividad (comenzó con startActivityForResult()) llamando a finishActivity().
  • Se puede detener un servicio llamando a su método  stopSelf(), o llamando a Context.stopService().
 
El archivo de manifiesto
 
Para que Android pueda dar inicio a un componente en la aplicación, tiene que saber que ese componente existe. Por lo tanto,  las aplicaciones tienen que declarar sus componentes, utilizando para ello el archivo AndroidManifest.txt, que es un archivo XML con el mismo nombre para todas las aplicaciones. Además, es utilizado para otras cosas, como para indicar los permisos.
Un ejemplo sería:
<?xml version="1.0" encoding="utf-8"?>
<manifest . . . >
   
<application . . . >
       
<activityandroid:name="com.example.project.FreneticActivity"
                 
android:icon="@drawable/small_pic.png"
                 
android:label="@string/freneticLabel"
                  . . .  
>
       
</activity>
        . . .
   
</application>
</manifest>

 El name indica el atributo de la actividad; icon indica el lugar donde se archivan los recursos y que contiene el icono; y label es la etiqueta que muestra a los usuarios para indicar la actividad.

 

Los otros componentes se declaran en forma similar: <service> elementos para servicios, <receiver> elementos para la difusión de los receptores, y <provider> elementos para los proveedores de contenido. Las actividades, servicios y proveedores de contenido que no se han declarado en el manifiesto no son visibles para el sistema y en consecuencia no se ejecutan nunca. Sin embargo, receptores de difusión o bien pueden ser declarados en el manifiesto, o se pueden crear dinámicamente en código (como BroadcastReceiver objetos) y registrado con el sistema llamando Context.registerReceiver().

Para obtener más información sobre cómo estructurar un archivo de manifiesto de la aplicación, vea el Archivo AndroidManifest.xml.

 

Se podría continuar con explicaciones de cómo funciona todo esto, es decir, podríamos hablar de actividades y tareas, procesos y subprocesos, ciclos de vida de los componentes..., pero no lo sabría explicar bien, porque ya se complica la cosa, y seguro que, tú como yo, estás deseando comenzar a ver algo positivo, y no tanta teoría; por lo tanto, sigamos con algo que ya se pueda ver, la interfaz de usuario.