PDF de programación - Los Fundamentos de Android

Imágen de pdf Los Fundamentos de Android

Los Fundamentos de Androidgráfica de visualizaciones

Publicado el 20 de Octubre del 2018
687 visualizaciones desde el 20 de Octubre del 2018
482,6 KB
14 paginas
Creado hace 1a (07/06/2018)
Introducción
Este capítulo presenta con detalle dos nociones que se abordaron en el capítulo anterior: el ciclo de
vida de las actividades, que hemos evocado con el método onCreate de la clase Activity, y la
noción de intención, con las etiquetas <intent-filter>, utilizadas en el manifiesto.
Comenzaremos estudiando las intenciones, que son el vínculo entre los distintos componentes de la
aplicación en el sistema Android. Gracias a ellos, una aplicación Android puede, en particular,
aprovechar otras aplicaciones instaladas en el sistema, incluso sin conocerlas. En efecto, las
intenciones se resuelven dinámicamente en tiempo de ejecución del sistema.

A continuación, presentamos el ciclo de vida de una actividad, y los métodos disponibles para
salvaguardar el estado de una actividad y restaurar una actividad destruida por el sistema: es, en
efecto, el sistema el que gestiona el ciclo de vida de las aplicaciones (y, por tanto, de las actividades).
En concreto, es el sistema quien decide cuándo se destruye una aplicación, especialmente en función
de los recursos del sistema disponibles tales como el procesador, la memoria… o en función de la
duración de la inactividad del usuario... Cualquier aplicación desarrollada de manera seria, debe tener
en cuenta todo esto.

Intención
Una de las grandes ventajas de Android es que no es preciso vincular entre sí de manera estática los
componentes de aplicación, volviéndolos así lo más independientes posible. Este principio se lleva tan
lejos que permite incluso poder utilizar componentes de una aplicación desde otra aplicación sin
conocerlos en tiempo de desarrollo. Se escogerán en tiempo de ejecución de la aplicación, bien por el
sistema, bien por el usuario.

Para poder hacer esto y comunicar de manera dinámica componentes entre ellos, Android proporciona
objetos de tipo Intent (intención). Como su propio nombre indica, una intención designa una acción a
realizar. Pero una intención también puede describir un evento que acaba de producirse, como en el
caso de los receptores de eventos (véase el capítulo Componentes principales de la aplicación -
Receptor de eventos).

Un objeto de tipo Intent encapsula únicamente información, como por ejemplo un mensaje. Es
tarea del componente origen y del sistema hacer uso del mismo para explotar la intención que

encierra.

Android proporciona nombres genéricos para las acciones, que se pueden utilizar tal cual. Por
ejemplo, android.intent.action.DIAL para iniciar una llamada telefónica.
El desarrollador puede, a su vez, crear sus propias acciones. Dado que las acciones pueden tener un
alcance global en el sistema, es preciso nombrar las acciones creadas precediéndolas del nombre del
paquete de la aplicación que las crea.
La acción de un objeto de tipo Intent puede especificarse y recuperarse utilizando los
métodossetAction y getAction.
Sintaxis

public Intent setAction (String action)
public String getAction ()

El método setAction devuelve el mismo objeto de tipo Intent con el objetivo de poder
encadenar llamadas entre distintos métodos.

Para realizarse, la acción especificada en la intención puede requerir datos. También puede necesitar
información respecto a los datos que deben utilizarse o modificarse en la acción. Toda esta información
puede proporcionarse al objeto de tipo Intent bajo la forma de categoría, de datos o de Extras.
La categoría se utiliza para determinar el tipo de componente que debe realizar la acción. Existen
varias categorías por defecto. El desarrollador puede, incluso, definir nuevas categorías. Para agregar
una categoría a una intención basta con invocar a su método addCategory pasándole como
parámetro una cadena de caracteres que designe a la categoría.

Sintaxis

public Intent addCategory (String category)

Los datos reagrupan la URI y el tipo MIME del dato afectado. El formato y el sentido de estos datos son
dependientes de la acción especificada en la intención. En general, el tipo MIME puede deducirse de la
URI. He aquí los principales métodos disponibles para especificar y recuperar esta información:

Sintaxis

public Intent setData (Uri data)
public Uri getData ()
public Intent setType (String type)
public String getType ()

El uso de setData y el de setType son concurrentes. Borran sus datos respectivamente.

Los Extras son otros datos de aplicación que pueden incluirse en la intención utilizando
el métodoputExtras, y el método getExtras para recuperarlos. Estos datos deben proporcionarse
bajo la forma de un objeto de tipo Bundle.
La función de la clase Bundle es similar a la de la clase Map, es decir almacena los datos, asociados
entre sí bajo la forma clave-valor. A una clave le corresponde un único valor que puede no obstante ser
una tabla de valores del mismo tipo. La clase Bundle sólo acepta cadenas de caracteres como clave.
Los valores deben implementar la interfaz Parcelable, mecanismo de serialización ligera específico
de Android.

Preste atención, la interfaz Parcelable y el tipo Parcel asociado no deben utilizarse para
serializar datos persistente, la representación interna de los datos puede modificarse con cada

versión del SDK.

Sintaxis

public Intent putExtras (Bundle extras)
public Bundle getExtras ()
Para mayor comodidad, la clase Intent proporciona una multitud de métodos directos para especificar
los datos extras sin tener que pasar explícitamente por el objeto Bundle.
Sintaxis

public Intent putExtra (String name, int value)
public int getIntExtra (String name, int defaultValue)
public Intent putExtra (String name, String value)
public Intent putExtra (String name, Parcelable value)
public String getStringExtra (String name)
...
Por último, el método addFlags permite agregar flags a un objeto de tipo Intent, como veremos
más adelante.

Sintaxis

public Intent addFlags (int flags)

Existen dos formas de escribir una intención: de forma explícita o de forma implícita.

1. Intención explícita

Una intención explícita designa de forma precisa el componente concreto al que está destinada. De
hecho, escoge también la acción que quiere realizar. La intención puede contener también la acción a
realizar en el caso en que el componente pueda realizar varias.

Uno de los usos más comunes de las intenciones explícitas es la ejecución de componentes de
aplicación, en particular actividades, en el interior de una misma aplicación.

El componente de destino se busca entre los componentes declarados en el manifiesto. Como
consecuencia, si el componente no aparece en el archivo, no podrá ser invocado.

En concreto, para crear una intención explícita, es preciso crear un objeto de tipo Intent e indicarle
la clase de destino. Para ello, una solución consiste en utilizar uno de los constructores de la

clase Intent. Éstos reciben como parámetro el contexto de la aplicación y el nombre de la clase de
destino y devuelven el objeto de tipo Intent creado. Otro de los constructores permite, además,
especificar la acción y los datos.

Sintaxis

public Intent (Context packageContext, Class<> cls)
public Intent (String action, Uri data, Context packageContext,
Class<> cls)

Ejemplo

Intent intent = new Intent(this, MiActividadDestino.class);

2. Intención implícita

A diferencia de la intención explícita, que designa al componente de destino, la intención implícita
indica, en sí misma, la acción a realizar. Encarga al sistema que encuentre el componente aplicativo
de destino que mejor se adapte para realizar esta acción, ubicado por lo general en otra aplicación. Si
existen varios componentes al mismo nivel, el sistema solicitará al usuario que seleccione uno. Si el
sistema no encuentra ninguno, se generará una excepción.

Descubramos en primer lugar cómo crear una intención implícita y a continuación cómo declaran los
componentes de aplicación las intenciones implícitas a las que pueden responder.

a. Creación
En particular, para crear una intención implícita, es preciso crear un objeto de tipo Intent e
indicarle la acción a realizar. Para ello, una solución consiste en utilizar uno de los constructores de
la clase Intent que reciben directamente la acción como parámetro. Otro de los constructores
permite especificar, además, los datos asociados.

Sintaxis

public Intent (String action)
public Intent (String action, Uri uri)

Ejemplo

Intent intent = new Intent(Intent.ACTION_DIAL,
Uri.parse("tel:654321987"));

El sistema buscará a continuación el mejor componente de entre los que hayan declarado la
capacidad de realizar la acción solicitada y respondan a los criterios exigidos. Utilizará para ello los
valores action, category y data del objeto intent.

b. Filtro de intención

Un filtro de intención permite a un componente de aplicación declarar al sistema el tipo de intención
implícita a la que puede responder. Sólo aquellas intenciones implícitas que se tengan en cuenta en
el filtro se procesarán en el componente afectado.

Los filtros de intención no tienen ninguna incidencia sobre las intenciones explícitas. Estas
últimas no tienen nada que hacer con estos filtros y los pasan.

La declaración de las capacidades de un componente de aplicación se realiza utilizando la
etiquetaintent-filter en el manifiesto. Un componente de aplicación puede tener varios filtros
de intención diferentes. Si no tiene ninguno, el componente sólo puede ser ejecutado por

intenciones explícitas.

Cuando debe procesarse una intención implícita, el sistema analiza sus datos y los compara a los de
los filtros de los componentes disponibles. El objeto de tipo Intent debe cumplir los criterios de
uno de los filtros para poder ser procesado. Los c
  • Links de descarga
http://lwp-l.com/pdf13949

Comentarios de: Los Fundamentos de Android (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad