SlideShare uma empresa Scribd logo
1 de 18
DESARROLLO DE APLICACIONES
MOVILES EN ANDROID

Servicios en Android

ING.IVAN PETRLIK AZABACHE
petrlikperu@gmail.com
UN SERVICIO EN ANDROID
Un servicio es un componente de aplicación que representa ya sea el deseo de una aplicación
para realizar una operación de más larga duración, mientras que no interactúa con el usuario,
o de proporcionar la funcionalidad para otras aplicaciones a utilizar. Cada clase de servicio
debe
tener
su
correspondiente <service>declaración
en
su
paquete AndroidManifest.xml . Servicios puede iniciar con Context.startService
() y Context.bindService () .
Tenga en cuenta que los servicios, al igual que otros objetos de la aplicación, ejecute en el
hilo principal de su proceso de alojamiento. Esto significa que, si el servicio se va a hacer
ningún uso intensivo de CPU (como reproducción de MP3) o el bloqueo (por ejemplo, redes)
las operaciones, deberá generar su propio hilo en el que para hacer ese trabajo. Más
información
sobre
esto
se
puede
encontrar
en Procesos
y
subprocesos . El IntentService clase está disponible como una aplicación estándar de
servicio que tiene su propio hilo donde se programa su trabajo por hacer.

¿Qué es un servicio?
• Un servicio es no un proceso independiente. El objeto de servicio sí mismo no implica que

se ejecuta en su propio proceso, a menos que se especifique lo contrario, se ejecuta en el
mismo proceso que la aplicación que es parte de.
• Un servicio es no un hilo. No es un medio en sí para hacer el trabajo fuera del hilo principal

(para evitar la aplicación no responde errores).
Así, un mismo servicio es realmente muy simple, que proporciona dos características
principales:
•

Una instalación para la aplicación indique al sistema acerca de algo que quiere hacer en el
fondo (incluso cuando el usuario no está interactuando directamente con la
aplicación). Esto corresponde a las llamadas a Context.startService () , que piden
al sistema para programar el trabajo para el servicio, que se extenderá hasta el servicio o
alguien más explícitamente detenerlo.

•

Una instalación para una aplicación a exponer algunas de sus funciones a otras
aplicaciones. Esto corresponde a las llamadas a Context.bindService () , que
permite una conexión de larga data que deben introducirse en el servicio con el fin de
interactuar con él.
Cuando un componente de servicio se crea realmente, por cualquiera de estas razones,
todo lo que el sistema realmente hace es crear una instancia del componente y llamar a
su onCreate
() y cualesquiera otros callbacks adecuados
en el hilo
principal. Corresponde al Servicio de implementar estos con el comportamiento apropiado,
tal como la creación de un subproceso secundario en el que se realiza su trabajo.
Tenga en cuenta que debido a servicio en sí es tan simple, usted puede hacer su interacción
con él tan simple o complicado como quieras: de tratarlo como un objeto local de Java que
permite hacer llamadas a métodos en directo (como lo ilustra Ejemplo de servicio local ), para
proporcionar una interfaz completa con remoteable AIDL.

Servicio del Ciclo de Vida
Hay dos razones por las que un servicio puede ser ejecutado por el sistema. Si alguien llama
a Context.startService () entonces el sistema recuperará el servicio (su creación y
llamando a su onCreate () método si es necesario) y luego llamar a su onStartCommand
(Intent, int, int) método con los argumentos proporcionados por el cliente. El servicio
en este punto continuará funcionando hasta que Context.stopService () o stopSelf
() es llamado.Tenga en cuenta que varias llamadas a Context.startService () no hacen nido
(aunque sí dan lugar a múltiples llamadas correspondientes a onStartCommand ()), así que no
importa cuántas veces se ha iniciado el servicio se detendrá una vez Context.stopService () o
stopSelf () es llamado, sin embargo, los servicios pueden usar su stopSelf (int) método
para garantizar que el servicio no se detiene hasta que comenzaron los intentos han sido
procesados.
Para los servicios iniciados, hay dos modos principales de funcionamiento adicionales pueden
decidir ejecutar en, según el valor que retornan desde onStartCommand (): START_STICKY se
utiliza para los servicios que están explícitamente inicia y se detiene cuando se necesita,
mientras que START_NOT_STICKYo START_REDELIVER_INTENT se utilizan por los servicios
que sólo deben permanecer en funcionamiento mientras el procesamiento de los comandos
enviados a ellos. Consulte la documentación relacionada para obtener más información sobre
la semántica.
Los clientes también pueden utilizar Context.bindService () para obtener una conexión
persistente con un servicio. Esto también crea el servicio si no se está ejecutando
(llamando onCreate () mientras lo hace), pero no llama a onStartCommand (). El cliente
recibirá el IBinder objeto de que el servicio regrese de suonBind (Intención) método,
que permite al cliente hacer llamadas luego de vuelta al servicio. El servicio permanecerá
funcionando mientras se establece la conexión (si o no el cliente mantiene una referencia en
IBinder del servicio). Por lo general, la IBinder devuelto es una interfaz compleja que se
ha escrito en AIDL .
Un servicio puede ser dos partidos y han obligado a las conexiones. En tal caso, el sistema
mantendrá el servicio que se ejecuta siempre que o bien se inicia o hay una o más conexiones
a la misma con el Context.BIND_AUTO_CREATE bandera. Una vez que ninguna de estas
situaciones de espera, el servicio de OnDestroy ()se llama al método y el servicio es
cancelado efectivamente. Todas limpieza (suspensión de hilos, anular el registro de
receptores) deben estar completos al regresar de OnDestroy ().
Permisos
Acceso global a un servicio se puede aplicar cuando se declara en su manifiesto
de <service> etiqueta. De este modo, otras aplicaciones tendrá que declarar un
correspondiente <uses-permission> elemento en su propio manifiesto para ser capaz de
iniciar, detener, o enlazar con el servicio.
A partir de GINGERBREAD , al utilizar Context.startService (Intención) , también
puede
establecer Intent.FLAG_GRANT_READ_URI_PERMISSION y
/
oIntent.FLAG_GRANT_WRITE_URI_PERMISSION en el Intento. Esto permitirá el acceso
temporal al servicio específico URI en el Intento. Acceso permanecerá hasta que el Servicio
ha llamado stopSelf (int) para ese comando de arranque o una posterior, o hasta que el
servicio se haya detenido completamente. Esto funciona para permitir el acceso a las otras
aplicaciones que no han solicitado el permiso de la protección del Servicio, o incluso cuando el
servicio no se exporta en absoluto.
Además, un servicio puede proteger a las distintas llamadas del IPC en ella con permisos,
llamando a la checkCallingPermission (String) método antes de ejecutar la
aplicación de esa llamada.
Ver la Seguridad y permisos documento para obtener más información sobre los permisos y la
seguridad en general.

Procesos del Ciclo de Vida
El sistema Android tratarán de mantener el proceso de alojamiento de un servicio en todo el
tiempo que el servicio se ha iniciado o tiene clientes vinculados a la misma. Cuando se ejecuta
bajo en la memoria y la necesidad de matar a los procesos existentes, la prioridad de un
proceso que aloja el servicio será la más alta de las siguientes posibilidades:
•

Si el servicio se está ejecutando código en su onCreate () , onStartCommand
() , o OnDestroy () métodos, entonces el proceso de hospedaje será un proceso en
primer plano para asegurar que este código se puede ejecutar sin ser asesinados.

•

Si el servicio se ha iniciado, a continuación, su proceso de alojamiento se considera
que es menos importante que todos los procesos que están visibles para el usuario en la
pantalla, pero más importante que cualquier proceso no visible. Debido a que sólo unos
pocos procesos son generalmente visibles para el usuario, esto significa que el servicio no
se debe matar salvo en condiciones extremas de poca memoria.

•

Si hay clientes vinculados al servicio, entonces el proceso que aloja el servicio nunca
es menos importante que el cliente más importante. Es decir, si uno de sus clientes es
visible para el usuario, entonces el servicio en sí se considera que es visible.

•

Un
servicio
iniciado
puede
utilizar
el startForeground
(int,
notificación) API para poner el servicio en un estado plano, donde el sistema
considera que es algo que el usuario es consciente y activamente tanto no es un candidato
para matar cuando poca memoria. (Todavía es teóricamente posible que el servicio que se
mató bajo presión de memoria extrema de la aplicación actual en primer plano, pero en la
práctica esto no debería ser una preocupación.)
Tenga en cuenta lo que significa que la mayor parte del tiempo el servicio se está ejecutando,
puede ser eliminada por el sistema si se encuentra bajo presión de memoria pesada. Si esto
sucede, el sistema más tarde intentará reiniciar el servicio. Una consecuencia importante de
esto es que si se implementa onStartCommand () para programar el trabajo a realizar de
forma
asíncrona
o
en
otro
hilo,
entonces
es
posible
que
desee
utilizar START_FLAG_REDELIVERY para que el sistema vuelva a emitir un Intención para
usted de modo que no se pierda si su servicio es asesinado mientras procesando.
Otros componentes de aplicación que se ejecutan en el mismo proceso que el servicio (tal
como una actividad ) puede, por supuesto, aumentar la importancia del proceso global más
allá de la importancia del servicio en sí.

Ejemplo de servicio local
Uno de los usos más comunes de un servicio es como un componente secundario que se
ejecuta junto con otras partes de una aplicación, en el mismo proceso que el resto de los
componentes. Todos los componentes de una carrera. Apk en el mismo proceso a menos que
se especifique lo contrario, así que esta es una situación típica.
Cuando se usa de esta manera, asumiendo los componentes están en el mismo proceso, se
puede simplificar mucho la interacción entre ellos: los clientes del servicio simplemente puede
convertir el IBinder que reciben de ella a una clase concreta publicada por el servicio.
CREANDO UNA APLICACIÓN ANDROID CON UN SERVICIO MUY
BASICO
Primeramente tenemos que crear un proyecto en Android a través del IDE estrella
Eclipse.

Proyecto creado

Ahora vamos a realizar el siguiente diseño.

Diseñando e
implementando un boton

Dar doble clic al archivo
main.xml
Ahora vamos a implementar código a la clase Activity de nombre Inicio.

Ir a la clase Inicio
que representa el
Activity principal del
proyecto

Listo para empezar a implementar
código java en este Activity

Implementamos un método de nombre IniciarServicio(View v) que me permita invocar al
Servicio , para eso tenemos que trabajar con un evento de nombre Onclick al momento de
presionar el botón Iniciar Servicio del archivo main.xml .

Implementando el
método
IniciarServicio()
Después de haber implementado el método IniciarServicio(View v)
evento del botón de la siguiente manera:

1) Ir al
main.xml

2) seleccionar el botón

ahora vamos a dar el

3) Elegir Other
Properties

Iniciar Servicio y darle clic
derecho

4) Elegir All
By Name
Después de haber elegido All By Name nos muestra otro menú contextual en la cual tenemos
que seleccionar la opción Onclick , se muestra una ventana en la cual tenemos que digitar el
evento Onclick.

5) Elegir el
evento
Onclick

4) Elegir All By
Name

Digitando el nombre del método que se implementó en l clase Activity(Inicio)

6) Digitar el
método
IniciarServicio

7) Presionar
el botón OK
Ahora que el evento del botón Iniciar Servicio invoca al método IniciarServicio implementado en
la clase Inicio (Activity), entonces ya estamos en la condiciones necesarias para poder iniciar el
servicio pero para eso tenemos que en el proyecto crear una clase que represente el servicio a
ejecutar.

Dar clic derecho
al paquete
EMPRESA.ANDROI
D.PRINCIPAL y
aparece un menú
contextual

Elegir la opción
New

Seleccionar la
opción Class

Cuando elegimos la opción class aparece una ventana en la cual tenemos que colocar el
nombre de la clase( Servicio) y luego presionar el botón Browse en la cual aparece una ventana
donde tenemos que buscar la clase en la cual tiene que heredar(Service).

Escribir el
nombre
“Servicio”

Presionar el botón
Browse
Buscar la clase
Service

Presionar el
botón OK

Así es como debe de quedar en la correspondiente ventana.

Así es como debe
de quedar

Así es como debe
de quedar

Presionar el
botón Finish
Esta es la estructura de la clase que hemos creado llamado Servicio

Seleccionar la
clase Servicio

Este es el código que se ha generado por defecto
de la clase Servicio que hereda de Service

Ahora adicionalmente le implementamos otros métodos complementarios que cumplen un rol
específico en un Servicio.

Aquí le estamos adicionando el método onCreate()
que me permite el inicio del servicio, además el
método onDestroy() que me permite el fin del
Servicio.
Ahora vamos implementar mensajes para probar que el servicio funciona.

Agregando un
mensaje de Inicio del
Servicio en el método
onCreate()

Agregando un mensaje de
Fin del Servicio en el
método onDestroy()

Ahora
que hemos colocado dos mensajes en el método onCreate() y el onDestroy(), a
continuación vamos a invocar el Servicio desde la clase Inicio (Activity ) dentro del método
IniciarServicio().

Ir a la clase
Inicio

Crear un Intent
para definir al
servicio que se va a
ejecutar

Ejecutar el
servicio

Parar el servicio
Ejecutando la aplicación Móvil.
Ahora vamos a desarrollar otra aplicación en android que maneje el tema de Servicios.
Primeramente vamos a crear un proyecto.
Aquí se ha creado un proyecto de nombre
PROYECTOSERVICIOANDROID02

Aquí tenemos creado por defecto la clase Inicio que
es un Activity
Aquí tenemos una Interfaz de nombre Protocolo

Aquí tenemos una clase de nombre
Servicio que hereda de Service

A continuación vamos a realizar el diseño respectivo través del archivo main.xml.

Diseñar la respectiva
Interfaz grafica

Ir y dar doble clic
al main.xml
A continuación vamos a detallar cada una de las clases mencionadas en la figura anterior.

Protocolo.java

Inicio.java

Mapeando el
EditText

Invocando al método Actualizar y
enviar un objeto de la actividad
Método que me permite imprimir el
contador en el campo de texto

Método que me permite
el inicio del Servicio

Método que me permite el fin del
Servicio
Servicio.java

Este método me sirve para referenciar un
objeto que llega de la clase Inicio y asi
poder llamar al método contabilizar() en el
Servicio

Este método
me permite el
inicio del
contador
donde cada 1
segundo se
incrementa
en una
unidad

Este método me
permite el
termino del
contador
Ejecución de la Aplicación Móvil

Iniciando el servicio

Parando el Servicio

Mais conteúdo relacionado

Semelhante a Desarrollo de aplicaciones móviles en Android

Semelhante a Desarrollo de aplicaciones móviles en Android (20)

Tontería enorme
Tontería enormeTontería enorme
Tontería enorme
 
Arquitectura_de_microservicios.pdf
Arquitectura_de_microservicios.pdfArquitectura_de_microservicios.pdf
Arquitectura_de_microservicios.pdf
 
Sincronizacion de procesos_android
Sincronizacion de procesos_androidSincronizacion de procesos_android
Sincronizacion de procesos_android
 
31-Android Generalidades Sobre Servicios Webs con MySQL
31-Android Generalidades Sobre Servicios Webs con MySQL31-Android Generalidades Sobre Servicios Webs con MySQL
31-Android Generalidades Sobre Servicios Webs con MySQL
 
Aplicaciones En Capas
Aplicaciones En CapasAplicaciones En Capas
Aplicaciones En Capas
 
Gestion de procesos Android
Gestion de procesos AndroidGestion de procesos Android
Gestion de procesos Android
 
Software de tiempo real.
Software de tiempo real.Software de tiempo real.
Software de tiempo real.
 
16 control de acceso a servicios
16  control de acceso a servicios16  control de acceso a servicios
16 control de acceso a servicios
 
16 control de acceso a servicios
16  control de acceso a servicios16  control de acceso a servicios
16 control de acceso a servicios
 
Soap y Pruebas Automatizadas
Soap y Pruebas AutomatizadasSoap y Pruebas Automatizadas
Soap y Pruebas Automatizadas
 
Cliente servidor
Cliente servidorCliente servidor
Cliente servidor
 
Arquitectura Del Servicio De Internet
Arquitectura Del Servicio De InternetArquitectura Del Servicio De Internet
Arquitectura Del Servicio De Internet
 
Implementacion exitosa soa
Implementacion exitosa soaImplementacion exitosa soa
Implementacion exitosa soa
 
Procesamiento_distribuido_clienteservidor_y_clusters..pptx
Procesamiento_distribuido_clienteservidor_y_clusters..pptxProcesamiento_distribuido_clienteservidor_y_clusters..pptx
Procesamiento_distribuido_clienteservidor_y_clusters..pptx
 
Terminal services
Terminal servicesTerminal services
Terminal services
 
RECICLAJE
RECICLAJERECICLAJE
RECICLAJE
 
Lozano william bdii_t7
Lozano william bdii_t7Lozano william bdii_t7
Lozano william bdii_t7
 
Lozano william bdii_t7
Lozano william bdii_t7Lozano william bdii_t7
Lozano william bdii_t7
 
Web service
Web serviceWeb service
Web service
 
Apuntes entorno cliente servidor
Apuntes entorno cliente   servidorApuntes entorno cliente   servidor
Apuntes entorno cliente servidor
 

Último

Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 

Último (10)

Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 

Desarrollo de aplicaciones móviles en Android

  • 1. DESARROLLO DE APLICACIONES MOVILES EN ANDROID Servicios en Android ING.IVAN PETRLIK AZABACHE petrlikperu@gmail.com
  • 2. UN SERVICIO EN ANDROID Un servicio es un componente de aplicación que representa ya sea el deseo de una aplicación para realizar una operación de más larga duración, mientras que no interactúa con el usuario, o de proporcionar la funcionalidad para otras aplicaciones a utilizar. Cada clase de servicio debe tener su correspondiente <service>declaración en su paquete AndroidManifest.xml . Servicios puede iniciar con Context.startService () y Context.bindService () . Tenga en cuenta que los servicios, al igual que otros objetos de la aplicación, ejecute en el hilo principal de su proceso de alojamiento. Esto significa que, si el servicio se va a hacer ningún uso intensivo de CPU (como reproducción de MP3) o el bloqueo (por ejemplo, redes) las operaciones, deberá generar su propio hilo en el que para hacer ese trabajo. Más información sobre esto se puede encontrar en Procesos y subprocesos . El IntentService clase está disponible como una aplicación estándar de servicio que tiene su propio hilo donde se programa su trabajo por hacer. ¿Qué es un servicio? • Un servicio es no un proceso independiente. El objeto de servicio sí mismo no implica que se ejecuta en su propio proceso, a menos que se especifique lo contrario, se ejecuta en el mismo proceso que la aplicación que es parte de. • Un servicio es no un hilo. No es un medio en sí para hacer el trabajo fuera del hilo principal (para evitar la aplicación no responde errores). Así, un mismo servicio es realmente muy simple, que proporciona dos características principales: • Una instalación para la aplicación indique al sistema acerca de algo que quiere hacer en el fondo (incluso cuando el usuario no está interactuando directamente con la aplicación). Esto corresponde a las llamadas a Context.startService () , que piden al sistema para programar el trabajo para el servicio, que se extenderá hasta el servicio o alguien más explícitamente detenerlo. • Una instalación para una aplicación a exponer algunas de sus funciones a otras aplicaciones. Esto corresponde a las llamadas a Context.bindService () , que permite una conexión de larga data que deben introducirse en el servicio con el fin de interactuar con él. Cuando un componente de servicio se crea realmente, por cualquiera de estas razones, todo lo que el sistema realmente hace es crear una instancia del componente y llamar a su onCreate () y cualesquiera otros callbacks adecuados en el hilo principal. Corresponde al Servicio de implementar estos con el comportamiento apropiado, tal como la creación de un subproceso secundario en el que se realiza su trabajo.
  • 3. Tenga en cuenta que debido a servicio en sí es tan simple, usted puede hacer su interacción con él tan simple o complicado como quieras: de tratarlo como un objeto local de Java que permite hacer llamadas a métodos en directo (como lo ilustra Ejemplo de servicio local ), para proporcionar una interfaz completa con remoteable AIDL. Servicio del Ciclo de Vida Hay dos razones por las que un servicio puede ser ejecutado por el sistema. Si alguien llama a Context.startService () entonces el sistema recuperará el servicio (su creación y llamando a su onCreate () método si es necesario) y luego llamar a su onStartCommand (Intent, int, int) método con los argumentos proporcionados por el cliente. El servicio en este punto continuará funcionando hasta que Context.stopService () o stopSelf () es llamado.Tenga en cuenta que varias llamadas a Context.startService () no hacen nido (aunque sí dan lugar a múltiples llamadas correspondientes a onStartCommand ()), así que no importa cuántas veces se ha iniciado el servicio se detendrá una vez Context.stopService () o stopSelf () es llamado, sin embargo, los servicios pueden usar su stopSelf (int) método para garantizar que el servicio no se detiene hasta que comenzaron los intentos han sido procesados. Para los servicios iniciados, hay dos modos principales de funcionamiento adicionales pueden decidir ejecutar en, según el valor que retornan desde onStartCommand (): START_STICKY se utiliza para los servicios que están explícitamente inicia y se detiene cuando se necesita, mientras que START_NOT_STICKYo START_REDELIVER_INTENT se utilizan por los servicios que sólo deben permanecer en funcionamiento mientras el procesamiento de los comandos enviados a ellos. Consulte la documentación relacionada para obtener más información sobre la semántica. Los clientes también pueden utilizar Context.bindService () para obtener una conexión persistente con un servicio. Esto también crea el servicio si no se está ejecutando (llamando onCreate () mientras lo hace), pero no llama a onStartCommand (). El cliente recibirá el IBinder objeto de que el servicio regrese de suonBind (Intención) método, que permite al cliente hacer llamadas luego de vuelta al servicio. El servicio permanecerá funcionando mientras se establece la conexión (si o no el cliente mantiene una referencia en IBinder del servicio). Por lo general, la IBinder devuelto es una interfaz compleja que se ha escrito en AIDL . Un servicio puede ser dos partidos y han obligado a las conexiones. En tal caso, el sistema mantendrá el servicio que se ejecuta siempre que o bien se inicia o hay una o más conexiones a la misma con el Context.BIND_AUTO_CREATE bandera. Una vez que ninguna de estas situaciones de espera, el servicio de OnDestroy ()se llama al método y el servicio es cancelado efectivamente. Todas limpieza (suspensión de hilos, anular el registro de receptores) deben estar completos al regresar de OnDestroy ().
  • 4. Permisos Acceso global a un servicio se puede aplicar cuando se declara en su manifiesto de <service> etiqueta. De este modo, otras aplicaciones tendrá que declarar un correspondiente <uses-permission> elemento en su propio manifiesto para ser capaz de iniciar, detener, o enlazar con el servicio. A partir de GINGERBREAD , al utilizar Context.startService (Intención) , también puede establecer Intent.FLAG_GRANT_READ_URI_PERMISSION y / oIntent.FLAG_GRANT_WRITE_URI_PERMISSION en el Intento. Esto permitirá el acceso temporal al servicio específico URI en el Intento. Acceso permanecerá hasta que el Servicio ha llamado stopSelf (int) para ese comando de arranque o una posterior, o hasta que el servicio se haya detenido completamente. Esto funciona para permitir el acceso a las otras aplicaciones que no han solicitado el permiso de la protección del Servicio, o incluso cuando el servicio no se exporta en absoluto. Además, un servicio puede proteger a las distintas llamadas del IPC en ella con permisos, llamando a la checkCallingPermission (String) método antes de ejecutar la aplicación de esa llamada. Ver la Seguridad y permisos documento para obtener más información sobre los permisos y la seguridad en general. Procesos del Ciclo de Vida El sistema Android tratarán de mantener el proceso de alojamiento de un servicio en todo el tiempo que el servicio se ha iniciado o tiene clientes vinculados a la misma. Cuando se ejecuta bajo en la memoria y la necesidad de matar a los procesos existentes, la prioridad de un proceso que aloja el servicio será la más alta de las siguientes posibilidades: • Si el servicio se está ejecutando código en su onCreate () , onStartCommand () , o OnDestroy () métodos, entonces el proceso de hospedaje será un proceso en primer plano para asegurar que este código se puede ejecutar sin ser asesinados. • Si el servicio se ha iniciado, a continuación, su proceso de alojamiento se considera que es menos importante que todos los procesos que están visibles para el usuario en la pantalla, pero más importante que cualquier proceso no visible. Debido a que sólo unos pocos procesos son generalmente visibles para el usuario, esto significa que el servicio no se debe matar salvo en condiciones extremas de poca memoria. • Si hay clientes vinculados al servicio, entonces el proceso que aloja el servicio nunca es menos importante que el cliente más importante. Es decir, si uno de sus clientes es visible para el usuario, entonces el servicio en sí se considera que es visible. • Un servicio iniciado puede utilizar el startForeground (int, notificación) API para poner el servicio en un estado plano, donde el sistema considera que es algo que el usuario es consciente y activamente tanto no es un candidato para matar cuando poca memoria. (Todavía es teóricamente posible que el servicio que se
  • 5. mató bajo presión de memoria extrema de la aplicación actual en primer plano, pero en la práctica esto no debería ser una preocupación.) Tenga en cuenta lo que significa que la mayor parte del tiempo el servicio se está ejecutando, puede ser eliminada por el sistema si se encuentra bajo presión de memoria pesada. Si esto sucede, el sistema más tarde intentará reiniciar el servicio. Una consecuencia importante de esto es que si se implementa onStartCommand () para programar el trabajo a realizar de forma asíncrona o en otro hilo, entonces es posible que desee utilizar START_FLAG_REDELIVERY para que el sistema vuelva a emitir un Intención para usted de modo que no se pierda si su servicio es asesinado mientras procesando. Otros componentes de aplicación que se ejecutan en el mismo proceso que el servicio (tal como una actividad ) puede, por supuesto, aumentar la importancia del proceso global más allá de la importancia del servicio en sí. Ejemplo de servicio local Uno de los usos más comunes de un servicio es como un componente secundario que se ejecuta junto con otras partes de una aplicación, en el mismo proceso que el resto de los componentes. Todos los componentes de una carrera. Apk en el mismo proceso a menos que se especifique lo contrario, así que esta es una situación típica. Cuando se usa de esta manera, asumiendo los componentes están en el mismo proceso, se puede simplificar mucho la interacción entre ellos: los clientes del servicio simplemente puede convertir el IBinder que reciben de ella a una clase concreta publicada por el servicio.
  • 6. CREANDO UNA APLICACIÓN ANDROID CON UN SERVICIO MUY BASICO Primeramente tenemos que crear un proyecto en Android a través del IDE estrella Eclipse. Proyecto creado Ahora vamos a realizar el siguiente diseño. Diseñando e implementando un boton Dar doble clic al archivo main.xml
  • 7. Ahora vamos a implementar código a la clase Activity de nombre Inicio. Ir a la clase Inicio que representa el Activity principal del proyecto Listo para empezar a implementar código java en este Activity Implementamos un método de nombre IniciarServicio(View v) que me permita invocar al Servicio , para eso tenemos que trabajar con un evento de nombre Onclick al momento de presionar el botón Iniciar Servicio del archivo main.xml . Implementando el método IniciarServicio()
  • 8. Después de haber implementado el método IniciarServicio(View v) evento del botón de la siguiente manera: 1) Ir al main.xml 2) seleccionar el botón ahora vamos a dar el 3) Elegir Other Properties Iniciar Servicio y darle clic derecho 4) Elegir All By Name Después de haber elegido All By Name nos muestra otro menú contextual en la cual tenemos que seleccionar la opción Onclick , se muestra una ventana en la cual tenemos que digitar el evento Onclick. 5) Elegir el evento Onclick 4) Elegir All By Name Digitando el nombre del método que se implementó en l clase Activity(Inicio) 6) Digitar el método IniciarServicio 7) Presionar el botón OK
  • 9. Ahora que el evento del botón Iniciar Servicio invoca al método IniciarServicio implementado en la clase Inicio (Activity), entonces ya estamos en la condiciones necesarias para poder iniciar el servicio pero para eso tenemos que en el proyecto crear una clase que represente el servicio a ejecutar. Dar clic derecho al paquete EMPRESA.ANDROI D.PRINCIPAL y aparece un menú contextual Elegir la opción New Seleccionar la opción Class Cuando elegimos la opción class aparece una ventana en la cual tenemos que colocar el nombre de la clase( Servicio) y luego presionar el botón Browse en la cual aparece una ventana donde tenemos que buscar la clase en la cual tiene que heredar(Service). Escribir el nombre “Servicio” Presionar el botón Browse
  • 10. Buscar la clase Service Presionar el botón OK Así es como debe de quedar en la correspondiente ventana. Así es como debe de quedar Así es como debe de quedar Presionar el botón Finish
  • 11. Esta es la estructura de la clase que hemos creado llamado Servicio Seleccionar la clase Servicio Este es el código que se ha generado por defecto de la clase Servicio que hereda de Service Ahora adicionalmente le implementamos otros métodos complementarios que cumplen un rol específico en un Servicio. Aquí le estamos adicionando el método onCreate() que me permite el inicio del servicio, además el método onDestroy() que me permite el fin del Servicio.
  • 12. Ahora vamos implementar mensajes para probar que el servicio funciona. Agregando un mensaje de Inicio del Servicio en el método onCreate() Agregando un mensaje de Fin del Servicio en el método onDestroy() Ahora que hemos colocado dos mensajes en el método onCreate() y el onDestroy(), a continuación vamos a invocar el Servicio desde la clase Inicio (Activity ) dentro del método IniciarServicio(). Ir a la clase Inicio Crear un Intent para definir al servicio que se va a ejecutar Ejecutar el servicio Parar el servicio
  • 14. Ahora vamos a desarrollar otra aplicación en android que maneje el tema de Servicios. Primeramente vamos a crear un proyecto. Aquí se ha creado un proyecto de nombre PROYECTOSERVICIOANDROID02 Aquí tenemos creado por defecto la clase Inicio que es un Activity Aquí tenemos una Interfaz de nombre Protocolo Aquí tenemos una clase de nombre Servicio que hereda de Service A continuación vamos a realizar el diseño respectivo través del archivo main.xml. Diseñar la respectiva Interfaz grafica Ir y dar doble clic al main.xml
  • 15. A continuación vamos a detallar cada una de las clases mencionadas en la figura anterior. Protocolo.java Inicio.java Mapeando el EditText Invocando al método Actualizar y enviar un objeto de la actividad
  • 16. Método que me permite imprimir el contador en el campo de texto Método que me permite el inicio del Servicio Método que me permite el fin del Servicio
  • 17. Servicio.java Este método me sirve para referenciar un objeto que llega de la clase Inicio y asi poder llamar al método contabilizar() en el Servicio Este método me permite el inicio del contador donde cada 1 segundo se incrementa en una unidad Este método me permite el termino del contador
  • 18. Ejecución de la Aplicación Móvil Iniciando el servicio Parando el Servicio