Diferencia entre revisiones de «Usuario:ManuelRomero/Android2/PrimerPrograma/Servicios»
(Página creada con '{{TEP}} {{:Usuario:ManuelRomero/Android2/PrimerPrograma/nav}} <br> ===Qué es un Service=== *Es una aplicación que se ejecuta en background y no tiene ninguna ventana asociada…') |
|||
Línea 4: | Línea 4: | ||
===Qué es un Service=== | ===Qué es un Service=== | ||
*Es una aplicación que se ejecuta en background y no tiene ninguna ventana asociada como en el caso de las activity. | *Es una aplicación que se ejecuta en background y no tiene ninguna ventana asociada como en el caso de las activity. | ||
+ | *Un servicio se ejecuta en el mismo hilo o thread que la activity que lo invoca. | ||
*El usuario gráficamente no ve que se está ejecutando | *El usuario gráficamente no ve que se está ejecutando | ||
*El usuario no puede interactuar con el service | *El usuario no puede interactuar con el service | ||
− | *Para inciar un ''Service'' se invoca al método startService() | + | *Para inciar un ''Service'' se invoca al método startService() - stopService() |
− | * | + | |
+ | *Otra forma de hacerlo es con Context.bindService() Context.unbindService() | ||
+ | **En este caso la activity puede interactuar con el service y retornarle un objeto de tipo IBinder | ||
*Existen muchos servicios del sistema que podemos utilizar | *Existen muchos servicios del sistema que podemos utilizar | ||
getSystemService() | getSystemService() | ||
− | *También podemos crear uno nosotros con new Service() o heredando de la clase | + | *aqui un ejemplo de como usar un servicio para hacer usar el GPS |
+ | http://www.sgoliver.net/blog/?p=1887 | ||
+ | *También podemos crear uno nosotros con new Service() o heredando de la clase Service | ||
*Haremos un ejemplo | *Haremos un ejemplo | ||
===Cuál es el ciclo de vida de un service=== | ===Cuál es el ciclo de vida de un service=== | ||
*El ciclo de vida de una '''''Service''''' es diferente al de un '''''Activity''''' | *El ciclo de vida de una '''''Service''''' es diferente al de un '''''Activity''''' | ||
+ | context.startService() | onCreate() - >onStartCommand() [Servicio ejecutandose] | ||
+ | context.stopService() | onDestroy() [servicio parado] | ||
+ | |||
+ | context.onBindService() | ->onCreate() [servicio creado] | ||
+ | [[imagen:cicloVidaServico.png]] | ||
===Un pequeños ejemplo=== | ===Un pequeños ejemplo=== | ||
+ | *Creamos una aplicación que arranque y pare un servicio que va a hacer sonar una canción | ||
+ | ;Creamos nuestra nueva aplicación como siempre | ||
+ | ;Creamos una interfaz con dos botones Start Stop | ||
+ | <source lang=xml> | ||
+ | <Button | ||
+ | android:id="@+id/btnstart" | ||
+ | android:layout_width="wrap_content" | ||
+ | android:layout_height="wrap_content" | ||
+ | android:text="Start" | ||
+ | android:onClick="clickBtnStart"/> | ||
+ | |||
+ | <Button | ||
+ | android:id="@+id/btnstop" | ||
+ | android:layout_width="wrap_content" | ||
+ | android:layout_height="wrap_content" | ||
+ | android:onClick="clickBtnStop" | ||
+ | android:text="Stop" /> | ||
+ | |||
+ | </source> | ||
+ | ;Creamos una clase para el Servicio | ||
+ | <source lang=java> | ||
+ | package com.example.servicios; | ||
+ | |||
+ | import android.app.Service; | ||
+ | import android.content.Intent; | ||
+ | import android.media.MediaPlayer; | ||
+ | import android.os.IBinder; | ||
+ | import android.util.Log; | ||
+ | import android.widget.Toast; | ||
+ | |||
+ | public class Servicios extends Service { | ||
+ | private static final String TAG = "MyService"; | ||
+ | MediaPlayer player; | ||
+ | @Override | ||
+ | public IBinder onBind(Intent intent) { | ||
+ | return null; | ||
+ | } | ||
+ | @Override | ||
+ | public void onCreate() { | ||
+ | Toast.makeText(this, "Servicio Creado", Toast.LENGTH_LONG).show(); | ||
+ | Log.d(TAG, "onCreate"); | ||
+ | player = MediaPlayer.create(this, R.raw.braincandy); | ||
+ | player.setLooping(false); // Set looping | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void onDestroy() { | ||
+ | Toast.makeText(this, "Servicio parado", Toast.LENGTH_LONG).show(); | ||
+ | Log.d(TAG, "onDestroy"); | ||
+ | player.stop(); | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void onStart(Intent intent, int startid) { | ||
+ | Toast.makeText(this, "Servicio arrancado", Toast.LENGTH_LONG).show(); | ||
+ | Log.d(TAG, "onStart"); | ||
+ | player.start(); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </source> | ||
+ | ;En nuestro programa principal de la activity | ||
+ | <source lang=java-> | ||
+ | package com.example.servicios; | ||
+ | |||
+ | import android.app.Activity; | ||
+ | import android.content.Intent; | ||
+ | import android.os.Bundle; | ||
+ | import android.util.Log; | ||
+ | import android.view.View; | ||
+ | |||
+ | public class MainServicios extends Activity { | ||
+ | private static final String TAG = "SERVICIOS"; | ||
+ | |||
+ | @Override | ||
+ | protected void onCreate(Bundle savedInstanceState) { | ||
+ | super.onCreate(savedInstanceState); | ||
+ | setContentView(R.layout.activity_main_servicios); | ||
+ | } | ||
+ | public void clickBtnStart(View v){ | ||
+ | Log.d(TAG,"start servicio"); | ||
+ | startService(new Intent (this,Servicios.class)); | ||
+ | |||
+ | } | ||
+ | |||
+ | public void clickBtnStop(View v){ | ||
+ | Log.d(TAG,"stop servicio"); | ||
+ | stopService(new Intent (this,Servicios.class)); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </source> | ||
+ | ;Decimos que tenemos un servicio en el Manifest | ||
+ | <source lang=xml> | ||
+ | ... | ||
+ | </activity> | ||
+ | <service android:enabled="true" android:name=".MyService" /> | ||
+ | </application> | ||
+ | ... | ||
+ | </source> |
Revisión de 10:58 29 may 2013
Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos. Ver página de charlas. |
Qué es un Service
- Es una aplicación que se ejecuta en background y no tiene ninguna ventana asociada como en el caso de las activity.
- Un servicio se ejecuta en el mismo hilo o thread que la activity que lo invoca.
- El usuario gráficamente no ve que se está ejecutando
- El usuario no puede interactuar con el service
- Para inciar un Service se invoca al método startService() - stopService()
- Otra forma de hacerlo es con Context.bindService() Context.unbindService()
- En este caso la activity puede interactuar con el service y retornarle un objeto de tipo IBinder
- Existen muchos servicios del sistema que podemos utilizar
getSystemService()
- aqui un ejemplo de como usar un servicio para hacer usar el GPS
http://www.sgoliver.net/blog/?p=1887
- También podemos crear uno nosotros con new Service() o heredando de la clase Service
- Haremos un ejemplo
Cuál es el ciclo de vida de un service
- El ciclo de vida de una Service es diferente al de un Activity
context.startService() | onCreate() - >onStartCommand() [Servicio ejecutandose] context.stopService() | onDestroy() [servicio parado]
context.onBindService() | ->onCreate() [servicio creado]
Un pequeños ejemplo
- Creamos una aplicación que arranque y pare un servicio que va a hacer sonar una canción
- Creamos nuestra nueva aplicación como siempre
- Creamos una interfaz con dos botones Start Stop
<Button android:id="@+id/btnstart" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Start" android:onClick="clickBtnStart"/> <Button android:id="@+id/btnstop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="clickBtnStop" android:text="Stop" />
- Creamos una clase para el Servicio
package com.example.servicios; import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.os.IBinder; import android.util.Log; import android.widget.Toast; public class Servicios extends Service { private static final String TAG = "MyService"; MediaPlayer player; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { Toast.makeText(this, "Servicio Creado", Toast.LENGTH_LONG).show(); Log.d(TAG, "onCreate"); player = MediaPlayer.create(this, R.raw.braincandy); player.setLooping(false); // Set looping } @Override public void onDestroy() { Toast.makeText(this, "Servicio parado", Toast.LENGTH_LONG).show(); Log.d(TAG, "onDestroy"); player.stop(); } @Override public void onStart(Intent intent, int startid) { Toast.makeText(this, "Servicio arrancado", Toast.LENGTH_LONG).show(); Log.d(TAG, "onStart"); player.start(); } }
- En nuestro programa principal de la activity
Idioma no válido.
Necesita especificar un idioma como esto: <source lang="html4strict">...</source>
lenguajes soportados para sintaxis remarcada:
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, algol68, apache, applescript, apt_sources, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, c_loadrunner, c_mac, caddcl, cadlisp, cfdg, cfm, chaiscript, cil, clojure, cmake, cobol, coffeescript, cpp, cpp-qt, csharp, css, cuesheet, d, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, j, java, java5, javascript, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nsis, oberon2, objc, objeck, ocaml, ocaml-brief, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, php-brief, pic16, pike, pixelbender, pli, plsql, postgresql, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, rails, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, sas, scala, scheme, scilab, sdlbasic, smalltalk, smarty, spark, sparql, sql, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xorg_conf, xpp, yaml, z80, zxbasic
package com.example.servicios; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; public class MainServicios extends Activity { private static final String TAG = "SERVICIOS"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_servicios); } public void clickBtnStart(View v){ Log.d(TAG,"start servicio"); startService(new Intent (this,Servicios.class)); } public void clickBtnStop(View v){ Log.d(TAG,"stop servicio"); stopService(new Intent (this,Servicios.class)); } }
- Decimos que tenemos un servicio en el Manifest
... </activity> <service android:enabled="true" android:name=".MyService" /> </application> ...