viernes, 5 de junio de 2015

“CICLO DE VIDA DE LAS APLICACIONES ANDROID”



El ciclo de vida de una aplicación en Android es manejada por el sistema operativo, basándose en las necesidades del usuario, los recursos disponibles, etc. Si tenemos una aplicación que está consumiendo muchos recursos y arrancamos otra nueva aplicación, el sistema operativo probablemente le diga a la aplicación que se queda en segundo plano que libere todo lo que pueda, y si es necesario la cerrará. En Android los recursos son normalmente muy limitados y por eso el sistema operativo tiene más control sobre las aplicaciones que en programas de escritorio.

1.-onCreate(Bundle)
Representa el momento en el que la actividad se crea. Este método normalmente lo generará el asistente al crear una nueva actividad en Android, y es donde crearemos todo lo que vaya a necesitar la actividad. Si antes hemos salvado los datos de la actividad en un objeto Bundle, podremos utilizarlo para regenerarla. Normalmente no lo usaremos.

2.-onStart()
La actividad va a pasar a estar en pantalla, aunque no necesariamente visible. Si venimos de una parada, pasaremos antes por onRestart().

3.-onRestart()
Anterior a onStart() cuando procedemos de una llamada a onStop().

4.-onResume()
La actividad va a empezar a responder a la interacción del usuario.

5.-onPause()
La actividad va a dejar de responder a la interacción del usuario.

6.-onStop()
La actividad ha pasado completamente a segundo plano.

7.-onDestroy()
La actividad va a ser destruida y sus recursos liberados.








“SEGURIDAD DE ANDROID”

Android propone un esquema de seguridad que protege a los usuarios, sin la necesidad de imponer un sistema centralizado y controlado por una única empresa. La seguridad en Android se fundamenta en los siguientes tres pilares:
  • Como se comentó en el primer capítulo Android está basado en Linux, por lo tanto, vamos a poder aprovechar la seguridad que incorpora este sistema operativo. De esta forma Android puede impedir que las aplicaciones tengan acceso directo al hardware o interfieran con recursos de otras aplicaciones.
  • Toda aplicación ha de ser firmada con un certificado digital que identifique a su autor. La firma digital también nos garantiza que el fichero de la aplicación no ha sido modificado. Si se desea modificar la aplicación está tendrá que ser firmada de nuevo, y esto solo podrá hacerlo el propietario de la claveprivada. Es habitual que un certificado digital sea firmado a su vez por una autoridad de certificación, sin embargo en Android esto no es necesario
  • Si queremos que una aplicación tenga acceso a partes del sistema que pueden comprometer la seguridad del sistema hemos de utilizar un modelo de permisos, de forma que el usuario conozca los riesgos antes de instalar la aplicación.
              “GESTION DE LA INFORMACION DE ANDROID”

Tener tu Android gestionado desde tu PC o Mac de la manera más sencilla posible es uno de los mayores quebraderos de cabeza para un usuario de a pie, tener algo así como lo que tienen los Samsung con Kíes, los HTC o incluso los iPhone con iTunes pero además que funcione bien y no sea tan restrictivo como estos…

La solución está aquí, con AirDroid. Y lo mejor, sin necesidad de cables.

AirDroid además de sencillo es efectivo a más no poder, y el hecho de que no necesitemos cables hace que podamos hacerlo desde cualquier lugar prácticamente, siempre que tengamos la necesidad.
Lo cierto es que las alternativas de acción que nos permite son muchísimas. Desde gestión del teléfono en sí, con llamadas y SMS (e incluso poder enviarlos y recibirlos), la gestión de lo multimedia y de todo contenido que tengamos guardado en nuestra SD, gestión de aplicaciones…
Empecemos por lo primero, por conectarlo, tan sólo tendremos que estar en la misma red WiFi que el ordenador desde el que queremos gestionar nuestro Android. Entrar en la aplicación desde el teléfono y darle a Start. Tan fácil como eso. Ya está.
Ahora sólo tendremos que abrir una nueva pestaña en nuestro navegador favorito, escribir la URL que nos dice que visitemos e introducir una vez ahí la contraseña autogenerada que pone en la pantalla. Con eso ya estarán conectados. Además, he de decir, que la App en sí, es un gestor de archivos y de memoria, desde ella podremos eliminar, editar, renombrar, mover… cualquier archivo que esté en nuestra SD, así como liberar memoria.


 


“ELEMENTOS DE LA INTERFAZ DE USUARIO DE UNA APLICACIÓN ANDROID”
Componentes de una aplicación
Existe una serie de elementos clave que resultan imprescindibles para desarrollar aplicaciones en Android. En este apartado vamos a realizar una descripción inicial de algunos de los más importantes. A lo largo del libro se describirán con más detalle las clases Java que implementan cada uno de estos componentes.
Layout
Un layout es un conjunto de vistas agrupadas de una determinada forma. Vamos a disponer de diferentes tipos de layouts para organizar las vistas de forma lineal, en cuadrícula o indicando la posición absoluta de cada vista. Los layouts también son objetos descendientes de la clase View. Igual que las vistas, los layouts pueden ser definidos en código, aunque la forma habitual de definirlos es utilizando código XML.
Botones
En el apartado anterior hemos visto los distintos tipos de layout con los que contamos en Android para distribuir los controles de la interfaz por la pantalla del dispositivo. En las próximas elecciones vamos a hacer un recorrido por los diferentes controles, y en esta concretamente los de tipo Button (Botón) que pone a nuestra disposición la plataforma de desarrollo Android.

Vamos a ver los diferentes tipos y cómo podemos personalizarlos, Android en este caso nos proporciona tres tipos de botones:

Button: Es el típico botón normal, contiene un texto y puede contener imágenes de tipo icono que puedes alinear con el texto.
ToggleButton: es de tipo on/off, contiene una rayita que indica ese on/off.
ImageButton: El botón contiene una imagen, es muy útil para cuando queremos hacer cosas vistosas y de diseño con formas raras, ya que el Button es rectangular, y aquí podemos usar cualquier forma poniendo el fondo transparente.
Imágenes
Arrastra y suelta un elemento "ImageView" (Vista de imagen). El elemento aparece en el emulador, pero no tiene ninguna imagen definida.
Haz doble clic sobre el archivo de código Java asociado con la pantalla XML. Agrega el siguiente código para añadir la imagen a la vista: ImageView1.setImageResource (R.drawable.mi_imagen); Reemplaza "mi_imagen" con un nombre de imagen localizado en la sección "res/drawable/" del proyecto de Eclipse.
Etiquetas 
En Java, la creación de una etiqueta puede hacerse mediante la declaración de una instancia de un objeto TextView. Sin embargo, la práctica más común es la de crear los layout a través de archivos XML, y para ello, necesitaremos incluir el elemento <TextView android:text=”[Mi etiqueta]“/> si queremos incluir etiquetas con su texto correspondiente en la GUI.
En algunos casos también, será necesario dotar a nuestra aplicación de ciertas características como la internacionalización, es decir, de manejar múltiples idiomas en el texto de nuestras interfaces. Esto es posible gracias a las referencias que podemos hacer a algún recurso en lugar de otro según las configuraciones que haga el usuario o las del propio teléfono. Este tema se abarcará con más detalle en un siguiente artículo, por lo mientras tengamos bien fuertes los conceptos básicos.

Propiedades de las etiquetas
A continuación enumero una lista de las propiedades más utilizadas cuando trabajamos con etiquetas:
android:typeface que sirve para indicar el tipo de letra con que se mostrará el texto de la etiqueta (ejemplo: normal, sans, serif, monospace, etc.)
android:textStyle para indicar si el tipo de letra seleccionado debe mostrarse en un formato en negritas (bold), cursiva (italic) o ambas (bold_italic).
android: textColor para indicar el color que tendrá el texto mostrado en la etiqueta, este debe estar expresado en formato RGB hexadecimal (ejemplo: #A4C639 para el verde característico de Android (; )
Conoce más propiedades consultando la tabla XML Attributes desde la documentación oficial de Androiddevelopers.
Cuadro de texto
Muy bien ahora veremos como poner los 3 
que meciona el titulo, asi que, en Android


El control TextView es otro de los clásicos 
en la programación de GUIs, las etiquetas 
de texto, y se utiliza para mostrar un 
determinado texto al usuario. Al igual que 
en el caso de los botones, el texto del control
 se establece mediante la propiedad android:text. 
A parte de esta propiedad, la naturaleza 
del control hace que las más interesantes 
sean las que establecen el formato del texto
 mostrado, que al igual que en el caso de los
 botones son las siguientes: android:background
 (color de fondo), android:textColor (color del

texto), android:textSize (tamaño de la fuente)

 y android:typeface (estilo del

texto: negrita, cursiva, …).
Listas
Al igual que un ListView, el contenido de la lista desplegable con los elementos del Spinner proviene de un Adapter (en el ejemplo de la documentación es un array definido en un fichero xml). A continuación se muestra un ejemplo básico de Spinner con su layout y la Activity asociada la cual mostrará un Toast si se selecciona un elemento. Esta selección no es obligatoria, ya que pulsando “back” la lista se cierra.
Pestañas
Con esto ya tendríamos montada toda la estructura de controles necesaria para nuestra interfaz de pestañas. Sin embargo, como ya dijimos al principio del artículo, con esto no es suficiente. Necesitamos asociar de alguna forma cada pestaña con su contenido, de forma que el el control se comporte correctamente cuando cambiamos de pestaña. Y esto tendremos que hacerlo mediante código en nuestra actividad principal.

Insertar propiedades dentro de un usuario android

En Android utilizamos archivos XML para la declaración de layouts y otros elementos de los que hará uso nuestra aplicación para su correcto funcionamiento. De esta forma, características como la instanciación dinámica se reserva para escenarios más complejos en dónde los elementos de UI no se conocen en tiempo de compilación (por ejemplo seleccionar una opción de un combo box que se ha llenado de acuerdo a datos consultados en Internet).
Pasemos entonces a aprender las bases para diseñar layouts para Android utilizando XML.
En Android los archivos de layout codificados en XML se consideran recursos y se guardan dentro del directorio res/layout del ptoyecto.
Cada archivo XML está formado por un árbol de elementos que especifican la manera en la que los elementos de la UI y contenedores se acomodarán para definir la parte visual de un objeto View. Los atributos de cada elemento en el XML se llaman propiedades y describen cómo es que deben verse los elementos y cómo debe comportarse un contenedor. Ponemos un ejemplo: Si tenemos un botón con la propiedad y el valorandroid:textStyle = “Bold” esto hará que el texto que muestre el botón estará en formato negritas. El uso de IDE’s como Eclipse y Motodev Studio nos permiten tener acceso a la opción de autocompletado cuando en nuestro código tecleamos la palabra android: en las propiedades de cualquier elemento de layout. De esta forma, podremos visualizar una lista con las propiedades disponibles para cada elemento.





Las características principales que nos ofrece Java son:


1.- Lenguaje  Simple:
Se lo conoce como lenguaje simpleporque viene de la misma estructura de c y c++; ya que c++ fue un referentepara la creación de java por eso utiliza determinadas características de c++ yse han eliminado otras.
2.- Orientado a Objeto:
Toda la programación en java ensu mayoría está orientada a objeto, ya que al estar agrupados en estructuras encapsuladas es más fácil su manipulación.
3.- Distribuido:
Permite abrir sockets, establecer aceptar conexiones con los servidores o clientes remotos; facilita lacreación de aplicaciones distribuidas ya que proporciona una colección declases para aplicaciones en red.
4.- Robusto:
Es altamente fiable encomparación con c,  se han eliminadomuchas características con la aritmética de punteros, proporciona numerosascomprobaciones en compilación y en tiempo de ejecución.
5.- Seguro:
La seguridad es unacaracterística muy importante en java ya que se han implementado barreras deseguridad en el lenguaje y en el sistema de ejecución de tiempo real.
6.- Indiferente a laarquitectura:
Java es compatible con los másvariados entornos de red, cualquiera sean estos desde Windows 95, Unix aWindows Nt  y Mac, para poder trabajarcon diferentes sistemas operativos.
Java es muy versátil ya queutiliza byte-codes que es un formato intermedio que sirve para transportar el código eficientemente o de diferentes  plataformas (Hardware - Software).
7.- Portable:
Por ser indiferente a laarquitectura sobre la cual está trabajando, esto hace que su portabilidad seamuy eficiente, sus programas son iguales en cualquiera de las plataformas, yaque java especifica tamaños básicos, esto se conoce como la máquina virtual dejava.
8.- Interpretado y compilado a lavez:
Java puede ser compilado einterpretado en tiempo real,  ya que  cuando se construye el código fuente este setransforma en una especie de código de máquina.

9.- Multihebra o Multihilos:
Java tiene una facilidad de cumplir varias funciones al mismo tiempo, gracias a su función  de multahilos ya que por cada hilo que el programa tenga se ejecutaran en tiempo real muchas funciones al mismo tiempo.
10.- Dinámico:
El lenguaje java es muy dinámico en la fase de enlazado, sus clases solamente actuaran en medida en que  sean requeridas o necesitadas con esto permitirá que los enlaces se puedan incluir incluso desde fuentes muy variadas o desde la red.
11.- Produce Applets:
En java se pueden crear aplicaciones independientes y applets.
Independientes porque se puedencomportar como cualquier programa escrito en cualquier lenguaje.
Por otra parte los appletsconsiderados pequeños programas, tienen la capacidad de ejecutar funciones muycomplejas.
12.- Alto rendimiento
Java es considerado de altorendimiento por ser tan  veloz en elmomento de correr los programas y por ahorrase muchas líneas de código.









Métodos en Java

Un método en Java es un conjunto de instrucciones definidas dentro de una clase, que realizan una determinada tarea y a las que podemos invocar mediante un nombre.
  

Algunos métodos que hemos utilizado hasta ahora:

– Math.pow()
– Math.sqrt()
– Character.isDigit()
- System.out.println();

Cuando se llama a un método, la ejecución del programa pasa al método y cuando éste acaba, la ejecución continúa a partir del punto donde se produjo la llamada.
Utilizando métodos:

-  Podemos construir programas modulares.

-  Se consigue la reutilización de código. En lugar de escribir el mismo código repetido cuando se necesite, por ejemplo para validar una fecha, se hace una llamada al método que lo realiza.

En Java un método siempre pertenece a una clase.


Todo programa java tiene un método llamado main. Este método es el punto de entrada al programa y también el punto de salida.






ESTRUCTURA GENERAL DE UN MÉTODO JAVA 

La estructura general de un método Java es la siguiente:

[especificadores] tipoDevueltonombreMetodo([lista parámetros]) [throwslistaExcepciones]
{
    // instrucciones
   [return valor;]
}
Los elementos que aparecen entre corchetes son opcionales.

especificadores (opcional): determinan el tipo de acceso al método. Se verán en detalle más adelante.


tipoDevuelto: indica el tipo del valor que devuelve el método. En Java es imprescindible que en la declaración de un método, se indique el tipo de dato que ha de devolver. El dato se devuelve mediante la instrucción return. Si el método no devuelve ningún valor este tipo será void.


nombreMetodo: es el nombre que se le da al método. Para crearlo hay que seguir las mismas normas que para crear nombres de variables.

Lista de parámetros (opcional): después del nombre del método y siempre entre paréntesis puede aparecer una lista de parámetros (también llamados argumentos) separados por comas. Estos parámetros son los datos de entrada que recibe el método para operar con ellos. Un método puede recibir cero o más argumentos. Se debe especificar para cada argumento su tipo.

Los paréntesis son obligatorios aunque estén vacíos.
throwslistaExcepciones (opcional): indica las excepciones que puede generar y manipular el método.

return: se utiliza para devolver un valor. La palabra clave return va seguida de una expresión que será evaluada para saber el valor de retorno. Esta expresión puede ser compleja o puede ser simplemente el nombre de un objeto, una variable de tipo primitivo o una constante.
El tipo del valor de retorno debe coincidir con el tipoDevuelto que se ha indicado en la declaración del método.
Si el método no devuelve nada (tipoDevuelto = void) la instrucción return es opcional.
Un método puede devolver un tipo primitivo, un array, un String o un objeto.
Un método tiene un único punto de inicio, representado por la llave de inicio {. La ejecución de un método termina cuando se llega a la llave final } o cuando se ejecuta la instrucción return.

La instrucción return puede aparecer en cualquier lugar dentro del método, no tiene que estar necesariamente al final.
CLASES Y OBJETOS EN JAVA


DEFINICIÓN: Implementación total o parcial de un TAD Entidad sintáctica que describen objetos que van a tener la misma estructura y el mismo comportamiento. Doble naturaleza: Módulo + Tipo de Datos Módulo (concepto sintáctico) Mecanismo para organizar el software Tipo (concepto semántico) Mecanismo de definición de nuevos tipos de datos: describe una estructura de datos (objetos) y las operaciones aplicables.

Clases
Una clase es una plantilla de la que se crean los objetos individuales.
A continuación vamos a ver un ejemplo de una clase en Java:
public class Carro{
   String marca;
int kilometraje;
   String color;

void encender(){
   }

void acelerar(){
   }

void apagar(){
   }
}
Una clase puede contener cualquiera de los siguientes tipos de variables:
  • Variables locales: Las variables definidas dentro de los métodos, los constructores o los bloques se denominan variables locales. Se declara la variable y se inicializa en el método y la variable será destruida cuando el método se ha completado.
  • Variables de instancia: Las variables de instancia son variables dentro de una clase, pero fuera de cualquier método. Estas variables se crean instancias cuando se carga la clase. Las variables de instancia se puede acceder desde el interior de cualquier método, constructor o bloques de esa clase en particular.
  • Variables de clase: Las variables de clase son variables declaradas dentro una clase y fuera de cualquier método. En el ejemplo anterior marcakilometraje y color son variables de clase Carro.
Una clase en Java puede tener cualquier número de métodos para acceder o modificar el comportamiento de dicha clase. En el ejemplo anterior encenderacelerar y apagar son métodos de clase Carro.
Una vez que tenemos una idea general de que es una clase en Java y cuales son sus características es importante revisar los siguientes aspectos:
Objeto: entidad existente en la memoria del ordenador que tiene unas propiedades (atributos o datos sobre sí mismo almacenados por el objeto) y unas operaciones disponibles específicas (métodos).
La programación orientada a objetos se basa en la programación de clases; a diferencia de la programación estructurada, que está centrada en las funciones.
Una clase es un molde del que luego se pueden crear múltiples objetos, con similares características.
Una clase es una plantilla (molde), que define atributos (variables) y métodos (funciones)
La clase define los atributos y métodos comunes a los objetos de ese tipo, pero luego, cada objeto tendrá sus propios valores y compartirán las mismas funciones.
Debemos crear una clase antes de poder crear objetos (instancias) de esa clase. Al crear un objeto de una clase, se dice que se crea una instancia de la clase o un objeto propiamente dicho.

Como se mencionó anteriormente, una clase proporciona los planos de objetos. Así que, básicamente, un objeto se crea de una clase. En Java, la palabra clave new se utiliza para crear nuevos objetos.
Existen tres pasos al crear un objeto de una clase:
  • Declarar: Debemos declarar una variable con su nombre y con el tipo de objeto que va a contener.
  • Instanciar: La palabra clave new se utiliza para crear el objeto.
  • Inicialización: La palabra clave new va seguida de una llamada a un constructor. Esta llamada inicializa el nuevo objeto.
Si seguimos el modelo del ejemplo anterior:
public class Carro{

publiccarro(String marca){
// El constructor tiene solo un parametro, en este caso marca
System.out.println(“La marca es : " + marca );
}
public static void main(String []args){
// Creamos la variable carro
      Carro miCarro = new Carro( "Ford" );
   }
}
Observemos que poseemos un constructor el cual recibe un parametro, en este caso la marca del carro, el cual va a imprimir el nombre de la marca cada vez que inicializemos un objeto de la clase carro.
A su vez con Carro miCarro = new Carro( "Ford" ) estamos cumpliendo los pasos que explicamos anteriormente ya que declaramos una variable llamada miCarro de la clase Carro, la instanciamos al hacerle new y la inicializamos al llamar al constructor con Carro( "Ford" ).






SENTENCIAS DE CONTROL

 – Sentencias de control de flujo: Bucle
Sentencias iterativas o Bucles
Necesarias para repetir partes del código
Número fijo de veces.
Dependiendo de la evaluación de una condición
Tres tipos
WHILE
DO… WHILE
Bucle FOR

Sentencia While
Evaluamos expresionCondicional y si su resultado es true procederá a ejecutar el bloque asociado a esta sentencia, procediendo a una nueva evaluación de la expresión Condicional para ver si de nuevo ejecuta el bloque o no.

DO … WHILE
Parecido al While pero siempre se ejecuta
La expresión se ejecuta posterior a la ejecución del bloque asociado.
 – Sentencias de control de flujo: Bucle

FOR
Repite la ejecución de un bloque de código un número determinado de veces.
Inicialización es la zona donde se inicializa el contador de iteraciones.
Condición indica si se debe ejecutar el bloque asociado.
Incremento es la zona que se ejecuta tras el bloque asociado, normalmente incrementando o decrementando el contador de iteraciones.



 – Sentencias de control de flujo: Salto incondicional
Sentencias de salto incondicional
No es recomendable.
Su objetivo es la finalización de ejecución de un bloque.
Break : Rompe la ejecución de un bloque.
Continue : Obliga a una nueva iteración de una sentencia de tipo iterativa
Comprobando la condición (en el caso de while o for )
Ejecutando la primera sentencia del bloque asociado al bucle (en el caso de do..while )
Return : Rompe la ejecución de una función (método).
Suele venir asociado con un valor que coincide con el tipo de retorno de la función.

Las sentencias break y continue permiten manipular el comportamiento normal de los bucles for para detener el bucle o para saltarse algunas repeticiones. Concretamente, la sentencia break permite terminar de forma abrupta un bucle y la sentencia continue permite saltarse algunas repeticiones del bucle.
El siguiente ejemplo muestra el uso de la sentencia break:
var cadena = "En un lugar de la Mancha de cuyo nombre no quiero acordarme...";
var letras = cadena.split("");
var resultado = "";

for(i in letras) {
if(letras[i] == 'a') {
break;
  }
Else {
    resultado += letras[i];
  }
}
alert(resultado);
// muestra "En un lug"

 La sentencia return. Esta sentencia nos permite finalizar también un conjunto de sentencias, con la peculiaridad esta vez de que también finaliza el método o función que en el que se encuentre. En el caso de que queramos devolver un valor desde esa función o método lo debemos poner a continuación de return. Por ejemplo:

void funcionEjemplo(){
    int i=0;
    while (i < 100){ //esta absurda función nos devuelve
       i++; //al llamarla el valor 100 como has
    } //podido comprobar
    return i;
}
Try y catch
La sentencia try...catch marca un bloque de las instrucciones a probar y especifica una o más respuestas al producirse una excepción. La sentencia try...catch es la que se ocupa de la excepción.
function encuentraNombredelMes (mes) {
    mes=mes-1; // Ajusta el número del mes por el índice de lista (1=Enero, 12=Diciembre)
    var meses=new Array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
if (meses[mes] != null) {
return meses[mes]
    } else {
       throw "Número_mes_Inválido"
    }
}

try {
// instrucciones a probar
    Nombremes =encuentraNombredelMes (miMes) // función que podría lanzar una excepción
}
catch (e) {
    Nombremes ="desconocido"
    logMisErrores(e) // pasa el objeto excepción al manejador de errores
}

Puede utilizar un sólo bloque catch para manipular todas las excepciones que pueden ser generadas en el bloque try, o puede utilizar bloques separados catch cada uno de los cuales manipula un tipo particular de excepción.

catch (catchID) {
Sentencias
}

La Sentencias throw
Todos los métodos Java utilizan la sentencia throw para lanzar una excepción.
Esta sentencia requiere un sólo argumento, un objeto Throwable. En el sistema Java, los objetos lanzables son ejemplares de la clase Throwable definida en el paquete java.lang. Aquí tienes un ejemplo de la sentencia throw.
Public Object pop() throws EmptyStackException {
Object obj;
if (size == 0)
throw new EmptyStackException();

obj = objectAt(size - 1);
    SetObjectAt (size - 1, null);
Size--;
return obj;
}