Usuario:ManuelRomero/Android2/PrimerPrograma/Servicios
De WikiEducator
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
- Archivo => Nuevo => Proyecto Android
- Insertamos nombres y valores a las diferentes opcipones como ya hemos visto
- 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 = "Servicio"; 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
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> ...