Diferencia entre revisiones de «Usuario:ManuelRomero/Android2/PrimerPrograma/Servicios»

De WikiEducator
Saltar a: navegación, buscar
(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…')
 
(Un pequeños ejemplo)
 
(2 revisiones intermedias por el mismo usuario no mostrado)
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()
*Para pararlo sotpService()
+
 
 +
*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 service
+
*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
 +
*Archivo => Nuevo => Proyecto Android
 +
*Insertamos nombres y valores a las diferentes opcipones como ya hemos visto
 +
;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 = "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();
 +
}
 +
 +
}
 +
</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>

Última revisión de 11:02 29 may 2013

Road Works.svg Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos.
Ver página de charlas.
Road Works.svg




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]

CicloVidaServico.png

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>
...