DISEÑO DE APLICACIONES MÓVILES PARA PYMES

78
PRODETUR DISEÑO DE APLICACIONES MÓVILES PARA PYMES Osuna, 17 de octubre de 2017 [email protected] Telf.: 954 486 800

Transcript of DISEÑO DE APLICACIONES MÓVILES PARA PYMES

PRODETUR

DISEÑO DE APLICACIONES MÓVILES PARA PYMES

Osuna, 17 de octubre de 2017

[email protected] Telf.: 954 486 800

PRODETUR

+01 OBJETIVOS

+02 PROGRAMACIÓN DIDÁCTICA

+03 MÓD. 01 DESARROLLO ANDROID

+04 EVALUACIÓN CALIDAD FRANCISCO LÓPEZ

PRODETUR

Acercar al alumnado al mundo de desarrollo Android

Conocer los aspectos básicos que serán necesarios a la

hora de enfrentar un desarrollo Android como son:

• Estética, representación de información y diseño

de GUIS

• Persistencia

• Acceso a servicios remotos

OBJETIVOS

PRODETUR

Contenidos

PROGRAMACIÓN DIDÁCTICA

MÓD. 1 DESARROLLO ANDROID

• Arquitectura de aplicaciones• Seguridad básica• Interfaz gráfica de usuario• Menús• Persistencia y Base de datos• Uso de la cámara• Servicios en segundo plano• Acceso a servicios remotos• Depuración de aplicaciones

PRODETUR

MÓD. 01 DESARROLLO ANDROID

PRODETUR

Android es un sistema operativo para móviles de código abierto basado en Linux.

Existe una gran variedad de dispositivos que utilizan dicho SO con todas sus

particularidades y componentes propios. Los componentes básicos de su

arquitectura están dividas por capas.

1. Arquitectura de aplicaciones

PRODETUR

1. Arquitectura de aplicaciones

La base de Android es el Kernel de Linux,

permitiendo a los fabricantes de dispositivos

desarrollar controladores de hardware para un

kernel muy conocido.

Kernel de Linux

Proporciona interfaces estándares que exponen

las capacidades de hardware del dispositivo

al framework de la API de Java de más alto nivel.

Capa de abstracción de hardware (HAL)

La capa que se sitúa justo sobre el kernel la

componen las bibliotecas nativas de Android. Estas

bibliotecas están escritas en C o C++ y compiladas

para la arquitectura hardware específica del

teléfono. Ejemplos: SSL, OpenGL, SQLite, etc.

Bibliotecas C/C++ nativas

PRODETUR

1. Arquitectura de aplicaciones

No se considera una capa en sí misma, dado que también está formada por bibliotecas. Incluye la

mayoría de las funcionalidades de las bibliotecas habituales de Java así como otras específicas de

Android.

La mayoría de los componentes de esta capa son bibliotecas Java que acceden a los recursos a través

de la máquina virtual. Entre las más importantes se encuentran las siguientes: Content Providers, Activity

Manager, Package Manager, Location Manager, etc

Tiempo de ejecución de Android

Framework de la API de Java

La capa superior de esta pila de software la forman, como no podría ser de otra forma, las aplicaciones.

En este saco se incluyen todas las aplicaciones del dispositivo, tanto las que tienen interfaz de usuario

como las que no, tanto las nativas (programadas en C o C++) como las administradas (programadas en

Java), tanto las que vienen de serie con el dispositivo como las instaladas por el usuario. Aquí está

también la aplicación principal del sistema: Inicio (Home), también llamada a veces launcher.

Apps del sistema

PRODETUR

Principales bibliotecas de Android

1. Arquitectura de aplicaciones

• Android.view

Proporciona las principales clases parar crear las interfaces gráficas y capturar las

interacciones con la misma.

• Android.app

Contiene clases de alto nivel que encapsulan el modelo general de aplicación de Android.

Clases importantes: Activity y Service.

• Android.util

Contiene útiles para formateadores de fecha, texto, parseadores, etc.

• Android.database

Gracias a ella podemos tener interacciones a bajo nivel con las base de datos y los

Cursores.

• Android.content

Proporciona clases para el manejo de acceso de datos, principalmente usadas con recursos,

proveedores de contenido y paquetes. Parte de esta biblioteca es la clase Context.

• Otras

Android.webkit, android.media, android.provider, android.telephony, etc.

PRODETUR

Componentes de una App

• Activities

Representan el componente principal de la interfaz gráfica de una aplicación. Se puede

pensar en una actividad como el elemento análogo a una ventana o pantalla en cualquier

otro lenguaje visual.

• Services

Son componentes sin interfaz gráfica que se ejecutan en segundo plano. Pueden realizar

cualquier tipo de acciones, por ejemplo actualizar datos, lanzar notificaciones, etc.

• Content Providers

Es el mecanismo para compartir datos entre aplicaciones. Mediante estos componentes es

posible compartir determinados datos de nuestra aplicación sin mostrar detalles sobre su

almacenamiento interno, su estructura, o su implementación. De la misma forma, nuestra

aplicación podrá acceder a los datos de otra.

• Broadcast Receivers

Componente destinado a detectar y reaccionar ante determinados mensajes o eventos

globales generados por el sistema (por ejemplo: “Batería baja”, “SMS recibido”, “Tarjeta SD

insertada”, …) o por otras aplicaciones.

1. Arquitectura de aplicaciones

PRODETUR

Componentes de una App

1. Arquitectura de aplicaciones

• Views

Componentes básicos con los que se construye la interfaz gráfica de la aplicación.

De inicio, tenemos una gran cantidad de controles básicos, como cuadros de

texto, botones, listas desplegables, imágenes, etc. Existe la posibilidad de

extender la funcionalidad de estos controles básicos o crear nuestros propios

controles personalizados.

• Intents

Elemento básico de comunicación entre los distintos componentes que hemos

descrito anteriormente. Se pueden entender como los mensajes o peticiones que

son enviados entre los distintos componentes de una aplicación o entre distintas

aplicaciones. Mediante un intent se puede mostrar una actividad desde cualquier

otra, iniciar un servicio, enviar un mensaje broadcast, iniciar otra aplicación, etc.

• Notifications

Pueden ser usados para alertar a los usuarios sin tener una pantalla en concreto.

PRODETUR

1. Arquitectura de aplicaciones

Ciclo de vida de una Activity

PRODETUR

1. Arquitectura de aplicaciones

Versiones

PRODETUR

1. Arquitectura de aplicaciones

Porcentaje de dispositivos por versiones (Hasta 02/10/2017)

Sin soporte

PRODETUR

1. Arquitectura de aplicaciones

Elementos importante en el archivo build.gradle

• buildToolsVersion Indica la versión del SDK de Android que vamos a usar.

• signingConfigs Configura las distintas firmas que podemos tener.

• productFlavors Indica las variantes que pueden existir de nuestra app.

• defaultConfig Contiene las configuraciones por defecto que se tomarán si no han sido

establecidas en los flavors.

• applicationId Identificador de la app, toda aplicación tiene un ID único que será el que

se utilice para subir a Google Play. Ej: es.prodetur.ejemploid

• minSdkVersion Versión mínima que soportaremos. Se debe establecer el valor de la

API. Si ponemos 21, indicará que sólo los dispositivos con API 21 (Lollipop) en adelante

serán soportados.

• versionCode Código de la versión. Siempre es un número y tiene que ser

incrementado para cada versión que generemos para subir a Google Play.

• versionName Nombre de la versión, al tener tipo String podemos poner el nombre que

queramos. Ej: “1.0.2”

• buildTypes Son los tipos de compilación que tendremos, en él podemos definir la

posibilidad de incluir proguard, tipo de firmado, etc.

PRODETUR

1. Arquitectura de aplicaciones

Flavors

Se definen en el archivo build.gradle bajo la etiqueta productFlavors. Sirven para

definir las variantes que puede tener nuestra app. Por ejemplo:

Si tenemos una app que tenga la versión demo y la versión completa podemos

definirla tal que así:

PRODETUR

1. Arquitectura de aplicaciones

Recursos por flavors

Se pueden definir distintos recursos / clases por cada flavor. Útil para cambiar

iconos, literales, nombre de la app, etc.

PRODETUR

1. Arquitectura de aplicaciones

Firma

Se define en el archivo build.gradle bajo la etiqueta signingConfigs. Se pueden

configurar tantas firmas como queramos, las cuales luego usaremos en la etiqueta

buildTypes. Un ejemplo de firma sería:

PRODETUR

1. Arquitectura de aplicaciones

Estructura de un proyecto

• Manifest

Tendrá en su interior la clase AndroidManifest, la cuál tiene

todas las definiciones de permisos, activities, configuraciones,

servicios, etc.

• Java

Contiene todas las clases de java que necesitamos en el

proyecto.

• Res

Carpeta donde irán todos los recursos de la aplicación, siempre

estarán agrupados por subcarpetas.

• Res/drawable

Contiene todos los recursos gráficos (iconos, backgrounds

definidos por XML, etc). Se dividirá en las carpetas:

Drawable, drawable-ldpi, drawable-mdpi, drawable-hdpi,

drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi, drawable-

nodpi

PRODETUR

1. Arquitectura de aplicaciones

Estructura de un proyecto

• Res/layout

En ella se encuentran todos los layouts que dan forma a la app.

• Res/Menu

Encontramos todos los menús definidos, ya sean de tipo

contextual, lateral u opciones en la toolbar.

• Res/Mipmap

Generalmente sólo encontraremos el icono de la aplicación

• Res/Values

Aquí estarán todos los recursos no gráficos. Están agrupados

entre otros por:

• Colors Definición de los colores

• Strings Definición de los literales para su

internacionalización (I18N).

• Styles Estilos de las vistas

• Dimens Dimensiones comunes

PRODETUR

1. Arquitectura de aplicaciones

Estructura de un proyecto

• Res/anim o animator

Tendrá todas las animaciones definidas por XML

• Res/Raw

Contiene recursos adicionales, normalmente en formato distinto

a XML, que no se incluyan en el resto de carpetas de recursos.

• Gradle Scripts

Encontraremos tantos archivos build.gradle como módulos

tenga nuestro proyecto más el común. En este caso tenemos:

• Del proyecto Contiene configuraciones para todos

los módulos.

• Del módulo app Tiene todas las configuraciones que

hemos mencionado anteriormente

• Proguard-rules.pro

En él estarán todas las configuraciones para aplicar proguard

en nuestro proyecto siempre y cuando esté habilitado.

PRODETUR

1. Arquitectura de aplicaciones

Entorno de desarrollo (IDE) y Gradle

Android Studio Aplicación Gradle

PRODETUR

2. Seguridad básica

Permisos

SSL

Criptografía

Proguard

Almacenamiento

seguro de datos

WebViews y

JavaScript

Permisos

SSL

Proguard

PRODETUR

2. Seguridad básica

• Permisos

Antes de incluir un permiso en la app debemos pensar si es realmente necesario, un exceso

de permisos puede plantear al usuario la instalación de la aplicación.

No se deben definir permisos especiales y se recomienda utilizar sólo los existentes por el

SO.

Existen 4 niveles de protección:

• Normal

• Dangerous

• Signature

• signatureOrSystem

• Criptografía

Usar un generador de claves aleatorias y el KeyStore para almacenarlas de forma segura.

• Almacenamiento de datos seguro

Tipos:

• Interno Sólo lo puede usar nuestra app

• Externo Editable a nivel global

PRODETUR

2. Seguridad básica

• Certificados SSL

Uno de los requisitos indispensables para que la comunicación Servidor App

sea segura y resistente a ataques.

• Carga dinámica de código

Se desaconseja por completo este uso, es uno de los mayores problemas de

seguridad en una aplicación.

• WebViews y JavaScript

Si nuestra aplicación usa este componente debemos tener cuidado con el la

posibilidad de cargar código JavaScript malicioso en nuestra app.

• Proguard

Se trata de la ofuscación de código, es decir, volver el código ilegible y sin la

posibilidad de realizar una traza.

Se configura en los buildTypes de la siguiente forma:

PRODETUR

3. Interfaz Gráfica de Usuario (UI)

Layouts

los layouts son elementos no visuales destinados a controlar la distribución,

posición y dimensiones de los controles que se insertan en su interior.

Tipos (Ordenados porcomplejidad):

• FrameLayout. Coloca todos sus controles hijos alineados con su esquina

superior izquierda. Es necesario establecerles la propiedad gravity para

colocarlos según nos interese.

• LinearLayout. Apila uno tras otro todos sus elementos hijos en

sentido horizontal o vertical según se establezca en su

propiedad android:orientation.

• RelativeLayout. Permite especificar la posición de cada elemento de forma

relativa a su elemento padre o a cualquier otro elemento incluido en el

propio layout.

• ConstraintLayout.

PRODETUR

3. Interfaz Gráfica de Usuario (UI)Densidades de pantalla

Cantidad de píxeles dentro de un área física de la pantalla, a la que en general se hace

referencia como “dpi” (puntos por pulgada).

• Existen 6 grupos

Density LDPI MDPI HDPI XHDPI XXHDPI XXXHDPI

DPI 120 160 240 320 480 640

• Porcentaje de uso (hasta 02/20/2017)

PRODETUR

3. Interfaz Gráfica de Usuario (UI)

Controles básicos

FAB

CheckBox

Button

RadioButton

Switch

EditTex

t

ImageVie

w

Eventos (Listeners)

Click, LongClick, FocusChange, TextChange, Swipe, Touch, etc.

PRODETUR

3. Interfaz Gráfica de Usuario (UI)

Práctica 1, nuestra primera aplicación en Android.

Crearemos una aplicación en la que introduciremos un texto en un campo de

edición que, al pulsar un botón, mostraremos un mensaje por pantalla (Toast)

con dicho texto.

Además dicha pantalla tendrá un botón flotante en la parte inferior que, al pulsar

en él, navegaremos hacia otra pantalla con una imagen estática.

PRODETUR

3. Interfaz Gráfica de Usuario (UI)

Fragments

Podría definirse como una porción de la interfaz de usuario que puede añadirse o

eliminarse de la interfaz de forma independiente al resto de elementos de la

actividad, y que por supuesto puede reutilizarse en otras actividades.

• Uso

PRODETUR

3. Interfaz Gráfica de Usuario (UI)

• Ciclo de vida dentro de una Activity

PRODETUR

3. Interfaz Gráfica de Usuario (UI)

RecyclerViews, barra de título y elementos de lista

Actionbar

/ Appbar /

Toolbar

CardView

PRODETUR

3. Interfaz Gráfica de Usuario (UI)

• Añadimos las dependencias necesarias

• Añadimos el RecyclerView al layout de nuestra activity

Este elemento necesita:

• Adapter, se trata del contenedor que tendrá todos los objetos que se pintarán en el

listado.

• ViewHolder, es la vista donde se representará nuestro objeto. Necesita un layout para

ello. En nuestro ejemplo, tendrá un CardView y un TextView dentro de él.

• LayoutManager, indicará cómo se debe de pintar los elementos. Destacamos el

LinerLayoutManager y GridLayoutManager.

PRODETUR

3. Interfaz Gráfica de Usuario (UI)

• Añadimos el CardView a nuestro elemento de lista (ViewHolder)

PRODETUR

3. Interfaz Gráfica de Usuario (UI)

• Adapter

Tiene que extender de RecyclerView.Adapter y tiene 4 métodos principales. Tres

de ellos necesitan que se implementen:

• onCreateViewHolder, crea el ViewHolder que usaremos para el pintado de

nuestro elemento.

• onBindViewHolder, es el encargado de establecer los valores del objeto en los

distintos campos del ViewHolder.

• getItemCount, tiene que devolver el tamaño total de los elementos.

Además, tenemos el método notifyDatasetChange() que forzará que todos los

elementos vuelvan a repintarse (onBindViewHolder) después de una

actualización de los mismos.

PRODETUR

3. Interfaz Gráfica de Usuario (UI)

• Práctica 2, app con listas.

Crearemos una aplicación en la que mostraremos una lista de objetos “Persona”

que tendrá un nombre, apellido y DNI. Al hacer click en un elemento de la lista

mostraremos un mensaje con el texto siguiente: [“Nombre y apellido: ” +

nombre_del_alumno + apellido_del_alumno].

PRODETUR

3. Interfaz Gráfica de Usuario (UI)

Material Design

Es una guía integral para el diseño visual, de movimientos y de interacción en distintas

plataformas y dispositivos.

Esencia:

• Diseño

• Animaciones

• Temas y estilos

• Experiencia de usuario (UX)

¿Por qué hacer dos clicks para algo que se puede hacer con uno?

• Nunca las sombras fueron tan importantes

Material design aporta además del os ejes X e Y, el eje Z dando profundidad a las vistas.

PRODETUR

3. Interfaz Gráfica de Usuario (UI)

Animaciones

• CircularReveal

Se trata de una animación muy visual que tiene por

objetivo hacer visible vistas de un modo distinto al

típico fadeIn / fadeOut.

• Animaciones de iconos o vectoriales

Los iconos que tienen la extensión “svg” tienen la

peculiaridad que podemos animar sus coordenadas

con el fin de crear nuevos iconos a partir de ellos.

PRODETUR

4. Menús

Contextual

1. Crear el menú

Definiremos un xml en la carpeta “menu” que tendrá

todas las opciones.

2. Asignar el menú a una vista

Definiremos un xml que tendrá todas las opciones.

3. Mostrar el menú

PRODETUR

4. Menús

Contextual

4. Gestionar el click de los elementos

PRODETUR

4. Menús

Opciones en la Toolbar

1. Crear menú

PRODETUR

4. Menús

Opciones en la Toolbar

android:showAsAction, indica si la opción de menú se mostrará como botón de

acción o como parte del menú de overflow. Valores:

• ifRoom. Se mostrará como botón de acción sólo si hay espacio disponible.

• withText. Se mostrará el texto de la opción junto al icono en el caso de que

éste se esté mostrando como botón de acción.

• never. La opción siempre se mostrará como parte del menú de overflow.

• always. La opción siempre se mostrará como botón de acción. Este valor

puede provocar que los elementos se solapen si no hay espacio suficiente

para ellos.

2. Asignar el menú a la toolbar en nuestra activity

PRODETUR

4. Menús

Opciones en la Toolbar

4. Gestionar el click de los elementos

PRODETUR

4. Menús

¡Importante!

Menú Contextual Opción en la Toolbar

onCreateContextMenu

onContextItemSelected

onCreateOptionsMenu

onOptionsItemSelected

PRODETUR

4. Menús

Menú lateral (NavigationView y DrawerLayout)

1. Crear layoutEstablece un margen para que

no se solape con la StatusBar

Desde dónde se abrirá el

menú lateral

Layout donde irá nuestra

Activity

Vista del menú lateral,

definiendo su header y

menú si lo necesitasen.

PRODETUR

4. Menús

Menú lateral (NavigationView y DrawerLayout)

2. Definición del menú

PRODETUR

4. MenúsMenú lateral (NavigationView y DrawerLayout)

2. Definición de la Toolbar para asociarle nuestro DrawerLayout

3. Configuración de los componentes

PRODETUR

4. Menús

Menú lateral (NavigationView y DrawerLayout)

4. Click en un elemento del menú

PRODETUR

4. MenúsMenú lateral (NavigationView y DrawerLayout)

Resultado final

PRODETUR

4. Menús

• Práctica 3, app con distintos menús.

En este caso haremos una app que tenga los tres tipos de menús explicados,

para ello, tendremos una sola pantalla con un listado de elementos “País”. Estos

elementos tendrán un nombre y un campo capital. Tipos de menú:

• Tendremos un menú contextual que saldrá cuando hagamos un long click

sobre un elemento de nuestra lista.

• Un menú lateral que simplemente tendrá texto estático y al pulsar sobre

un elemento de él, mostraremos un Toast.

• Una opción en la toolbar que al hacer click en él, compartiremos nuestra

app por redes sociales.

PRODETUR

5. Persistencia y Base de Datos

El almacenamiento de datos es muy importante para reducir el posible consumo

excesivo de red, salvado y restauración de preferencias y tratamiento de datos

maestros de las aplicaciones.

Clases a tener en cuenta

• SQLiteOpenHelper

• SQLiteDatabase

• Cursor

PRODETUR

5. Persistencia y Base de Datos

SQLiteOpenHelper

Tiene dos métodos abstractos, ambos tienen entre sus parámetros el objeto

SQLiteDatabase que se trata de la BD en la cuál se va a trabajar.

• onCreate(). Como su nombre indica, será donde se incluya las sentencias SQL

que darán lugar a la creación de la BD. (“CREATE TABLE Coches…”).

• onUpgrade(). En ese caso, tenemos algo más complejo. Actualizaciones de

nuestra estructura y migración de los datos si es necesario. Además, recibe

dos enteros, el número de la versión anterior y la nueva. Por si fuese necesario

aplicar más secuencias de actualizaciones.

PRODETUR

5. Persistencia y Base de Datos

SQLiteDatabase

Expone métodos para el control de la BD y la posibilidad de ejecutar sentencias

SQL.

Para ejecutar sentencias es muy importante saber que tenemos que seguir un

orden:

1. Abrir la BD (en modo escritura o lectura, según necesitemos) llamando al

método getWritableDatabase() o getReadableDatabase().

2. Ejecutar nuestras sentencias haciendo uso del método execSQL(String

sentenciaSQL).

3. Cerrar la BD llamando al método close().

PRODETUR

5. Persistencia y Base de Datos

Cursor

Expone los resultados de una consulta SQL. Los métodos más comunes son:

• getColumnNames(), que retorna un array de Strings con los nombres de las

columnas.

• getCount(), retorna el tamaño del array de elementos devueltos por la consulta.

• close(), cierra el cursor e invalida todos los recursos que se han necesitado.

• getColumnIndex(String columnName), retorna el índice de la columna pasada

por parámetro.

• moveToFirst(), nos sirve para saber si existe al menos un registro.

• moveToNext(), si retorna true, indica que existe un nuevo recurso y

accederemos a los datos del mismo en esa iteración.

PRODETUR

5. Persistencia y Base de Datos

Ejemplo de uso

PRODETUR

5. Persistencia y Base de Datos

Práctica 4, base de datos.

Esta app simplemente tendrá un formulario con los campos de nombre, apellidos

y edad. En este caso guardaremos un objeto Persona que debe tener las

propiedades anteriormente comentados más una llamada “id” de tipo int. En la

pantalla tendremos un botón de guardar, que al hacer click, guardará el objeto en

la base de datos.

Además, tendremos una opción en la toolbar que nos llevará a un listado para

ver todos los objetos que tenemos guardados en nuestra BD.

PRODETUR

5. Persistencia y Base de Datos (¡Extra!)

Usos de ORM y herramientas para gestión de base de datos.

Facilidad

Rapidez

Mismo

rendimiento

PRODETUR

6. Uso de la cámara

¿Cómo empezamos?

Permiso de la

cámara

Hardware

obligatorio

¿Necesitamos

almacenamiento?

¿Necesitamos grabar

audio?

¿Y localización?

PRODETUR

6. Uso de la cámara – Casos básicos

Tomar una foto

Simplemente llamamos a un Intent con un código para capturar cuando se haga

la foto ya que nos retornará por otro método.

Obtener un thumbnail de la imagen capturada

Obtenemos la foto capturada pero con menor resolución.

PRODETUR

6. Uso de la cámara

android.hardware.camera2 (android.hardware.camera está deprecada) >=

API 21• CameraManager

Obtiene todas las características de la cámara y la puede lanzar con el método

openCamera(…).

• CameraCaptureSession

Es necesario definir una sesión para capturar imágenes.

• Surface

Necesitamos este elemento para dar salida a lo que se está mostrando por la cámara.

• CaptureRequest

Define los parámetros para la captura de imágenes. Una vez definida podemos tomar una

imagen o una secuencia de ellas.

• TotalCaptureResult

Contiene la configuración final del hardware de la cámara, tiempo de captura, etc.

• Definición del uso de esta API

PRODETUR

6. Uso de la cámara

• Práctica 5, captura de imagen.

Tenemos una sola pantalla con dos botones.

El primero, abrirá una activity con un solo botón y un ImageView. Al hacer click

en dicho botón, abriremos la cámara de forma nativa y al hacer una foto

mostraremos la imagen en pantalla.

PRODETUR

6. Uso de la cámara, consideración

OutOfMemor

y

PRODETUR

6. Uso de la cámara, solución a OOM

Para acabar con la aparición de estos errores necesitamos reducir el tamaño de

las imágenes que pintaremos en pantalla. Además, antes de cargar la imagen en

memoria es importante que accedamos a su tamaño y redimensionemos la

imagen.

En Android Developer, dedicaron un artículo para la carga eficiente de imágenes

de gran tamaño.

https://developer.android.com/topic/performance/graphics/load-bitmap.html

PRODETUR

7. Servicios en segundo plano

• UI Thread vs Background Thread

• ¿Para qué los

necesito?

Application Not

Responding (ANR)

• ¿Solucione

s?Thread, AsyncTask e

IntentService

PRODETUR

7. Servicios en segundo plano

Thread No podemos actualizar

elementos de interfaz

• Métodos post y runOnUiThread

Ambos necesitan un nuevo runnable ya que serán lanzados en hilo principal.

• ¿Problemas? Sí, código ilegible

PRODETUR

7. Servicios en segundo plano

AsyncTask – Métodos

• onPreExecute(). Se ejecutará antes del código principal de nuestra tarea. Se

suele utilizar para preparar la ejecución de la tarea, inicializar la interfaz, etc.

• doInBackground(). Contendrá el código principal de nuestra tarea.

• onProgressUpdate(). Se ejecutará cada vez que llamemos al

método publishProgress() desde el método doInBackground().

• onPostExecute(). Se ejecutará cuando finalice nuestra tarea, o dicho de otra

forma, tras la finalización del método doInBackground().

• onCancelled(). Se ejecutará cuando se cancele la ejecución de la tarea antes

de su finalización normal.

PRODETUR

7. Servicios en segundo plano

AsyncTask – Tipos

1. El tipo de datos que recibiremos como entrada de la tarea en el

método doInBackground().

2. El tipo de datos con el que actualizaremos el progreso de la tarea, y que

recibiremos como parámetro del método onProgressUpdate() y que a su vez

tendremos que incluir como parámetro del método publishProgress().

3. El tipo de datos que devolveremos como resultado de nuestra tarea, que

será el tipo de retorno del método doInBackground() y el tipo del parámetro

recibido en el método onPostExecute().

PRODETUR

7. Servicios en segundo plano

IntentService

Se trata de un tipo particular de servicio que se preocupará por nosotros de la

creación y gestión del nuevo hilo de ejecución y de detenerse a sí mismo una

vez concluida su tarea asociada.

Implementación

Tendremos que extender nuestra clase de IntentService e implementar su

método onHandleIntent(). Este método recibe como parámetro un Intent, que

podremos utilizar para pasar al servicio los datos de entrada necesarios.

Inconveniente con respecto a los AsyncTask

No proporciona métodos en UI Thread por lo que la comunicación con el hilo

principal es algo más compleja. Para ello, se hará uso de los

BroadCastReceivers.

PRODETUR

7. Servicios en segundo plano

Práctica 6, tarea en segundo plano.

Haremos una tarea en segundo plano que calcula el factorial de un número

enviado por parámetro. En la pantalla tendremos dos botones:

• El primero, realizará la llamada usando un AsyncTask.

• El segundo, lo hará usando un Thread.

Ambos, pintarán en pantalla el valor devuelto por la tarea.

PRODETUR

8. Acceso a servicios remotos

Servicios tipo REST

Tipos de petición

• GET: Para consultar y leer recursos

• POST: Para crear recursos

• PUT: Para editar recursos

• DELETE: Para eliminar recursos.

• PATCH: Para editar partes concretas de un recurso.

Código de errores

• HTTP 200 Éxito

• /= HTTP 200 Fallos de validación, permisos, etc.

Headers más usados

• Content-Type. Define el tipo de la respuesta que se retornará y de los valores que serán

enviados al servicio. Generalmente usaremos application/json.

• Authorization. Usado para las autorizaciones en los servicios. (Basic Authorization)

PRODETUR

8. Acceso a servicios remotos

Comenzamos

1. Necesitamos el permiso de internet para poder realizar al llamada.

2. Definir cliente HTTP(HttpClient) que usaremos para establecer la

comunicación con el servidor.

3. Definición del tipo de llamada que haremos (HttpGet, HttpPost, etc)

incluyendo la url para realizar la llamada.

4. Incluimos los headers necesarios.

5. Si es necesario enviar datos (por ejemplo en un POST), debemos incluirlos

en el tipo de llamada creada.

6. Ejecutamos la llamada obteniendo un HttpResponse.

7. Evaluamos el objeto devuelto y lo tratamos según su código de error.

Parsearemos el objeto retornado.

8. Crearemos un AsyncTask para realizar la llamada.

9. Pintaremos los datos retornado por pantalla.

PRODETUR

Para la respuesta del servicio es necesario hacer uso del método toString de la

clase EntityUtils.

Después de esto, debemos convertir dicha respuesta en un JSONObject para

finalmente poder acceder a los campos correctamente.

8. Acceso a servicios remotos

Parser de respuestas

PRODETUR

8. Acceso a servicios remotos

• Práctica 7, llamada a servicio.

Implementaremos una llamada a servicio (GET) donde obtendremos una lista de

elementos que después de parsearlos, los mostraremos por pantalla. La app solo

tendrá una pantalla, donde al entrar en ella se realizará la llamada de forma

automática.

PRODETUR

8. Acceso a servicios remotos – Retrofit (¡Extra!)

Se trata de una biblioteca que proporciona una capa de abstracción para la

implementación de los servicios.

Ventajas

• Simpleza.

• No generar código redundante.

• Rapidez.

• Altamente configurable.

PRODETUR

En todo desarrollo, es necesario generar logs con el fin de seguir la traza de nuestras aplicaciones.

9. Depuración de aplicaciones

android.util.Log y hacer debug de nuestra app

Criticidad

• Error Log.e(…)

• Warning Log.w(…)

• Info Log.i(…)

• Debug Log.d(…)

• Verbose Log.v(…)

Parámetros

Es necesario pasarle dos parámetros al método de pintado de log:

• Tag, es la categoría asociada al log.

• Mensaje, que se mostrará en el log.

PRODETUR

EVALUACIÓN CALIDAD

PRODETUR

http://diga.grupoid.es/test/310

PRODETUR

PARA CUALQUIER CUESTIÓN RELACIONADA CON ESTA SESIÓN PUEDES DIRIGIRTE A:

[email protected] (Dpto. formación)

www.prodetur.es