Thursday, May 30, 2019

Fundamentos programación Android: Conceptos básicos y componentes (Parcial 1 teoria)

Conceptos básicos

Hemos visto que un proyecto Android está formado por varias carpetas estructuradas, pero lo que se instala en los dispositivos es un fichero con extensión .apk (application package).
Estos ficheros se generan con la herramienta apk (En el directorio tools del SDK) al terminar de compilar.
Las aplicaciones en Android tienen su propio entorno seguro de ejecución:

  • Cada aplicación se ejecuta en su propio proceso Linux. El sistema lo crea cuando ejecutamos la aplicación y lo destruye cuando no se use pasado un rato o cuando el Sistema necesite recursos para otra aplicación
  • Cada proceso se ejecuta en su propia máquina virtual, de esta manera está aislada del resto. De esta forma ante cualquier fallo en la aplicación solo afecta a su máquina virtual, no al resto.
  • A cada aplicación se le asigna un identificador de usuario (uid) distinto. Los permisos de los archivos que refieren a la aplicación (caché, datos etc) son solo accesibles por dicho usuario. Es posible asignar un mismo uid a dos aplicaciones para que compartan una misma máquina virtual y recursos. 
  • Componentes de las aplicaciones
  • La característica principal de Android es la reutilización de componentes de una aplicación por otra.
    Por ejemplo, imaginemos que estamos desarrollando una aplicación que almacena datos de libros junto con una fotografía de su portada. En lugar de tener que escribir el código para capturar o seleccionar la imagen de la portada, podemos pasar el control a la aplicación de la cámara del teléfono, o a la galería, así una vez tomemos una foto o seleccionemos una imagen de la galería se nos devuelve el control a nuestra aplicación con la imagen seleccionada.
    Para poder realizar estas operaciones, estamos obligados a dividir nuestras aplicaciones en módulos independientes que solo realicen una tarea concreta.

    Proveedores de contenido (ContentProvider)

    Ponen un grupo de datos a disposición de distintas aplicaciones, extienden de la clase ContentProvider para implementar los métodos de la interfaz, pero para acceder a esta interfaz se ha de usar una clase llamada ContentResolver
    Con esta clase se permite acceder al sistema de ficheros, bases de datos SQLite o cualquier otra fuente de datos unificada.