aula 05/06 (service)

Download Aula 05/06 (Service)

If you can't read please download the document

Upload: ricardo-longa

Post on 22-Jun-2015

220 views

Category:

Technology


1 download

DESCRIPTION

Um resumo sobre Service em Android.

TRANSCRIPT

  • 1. PROGRAMAO PARA DISPOSITIVOS MVEIS Service

2. Objetivos da aula Service 3. O que Service? 4. Uma classe responsvel por executar uma determinada tarefa em segundo plano, sem que o usurio perceba. 5. Precisa uma interface grfica? 6. Precisa uma interface grfica? No! 7. O sistema operacional que cuida da tarefa sendo executada em segundo plano. Ele finalizar o servio caso precise (muito) liberar memria. 8. Porque Service ao invs de Thread? 9. Thread no faz parte do ciclo de vida do Android. Service tem prioridade mxima sobre qualquer outro processo em segundo plano. 10. Mesmo que um Service seja encerrado pelo SO, o Android tentar reinici-lo assim que as condies de memria se normalizem. 11. Para criar um servio, precisamos estender a classe android.app.Service e mape-lo no AndroidManifest. Obrigatriamente precisamos sobreescrever o mtodo IBinder onBind(intent). 12. Para inici-lo, podemos utilizar os mtodos: startService(intent) ou bindService(intent, con, flags). 13. Qual a diferena? 14. Entre startService() e bindService()? 15. startService() faz com que o servio inicie e execute independente do processo que o criou. At que o stopService(intent) seja chamado ou at que o prprio servio chame stopSelf(). 16. Em outras palavras, se a Activity que chamou startService() for finalizada, o servio continuar sendo executado em segundo plano. 17. bindService() inicia um servio caso ainda no esteja em execuo ou simplesmente se conecta a ele. 18. Ao conectarmos ao servio com bindService() podemos obter uma referncia para manipul-lo. Enquanto mantivermos a referncia, estaremos conectados. 19. Activity para testes... 20. public class TesteNossoServicoActivity extends Activity { public void onCreate(Bundle savedInstanceState) { ... final Intent intent = new Intent("INICIAR_SERVICO"); Button iniciar = (Button) findViewById(R.id.iniciar); iniciar.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { startService(intent); } }); Button parar = (Button) findViewById(R.id.parar); parar.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { stopService(intent); } }); } } 21. Service registrado... 22. 23. NossoServico! 24. public class NossoServico extends Service implements Runnable { public void onCreate() { } public IBinder onBind(Intent intent) { return null; } public void run() { } } 25. public class NossoServico extends Service implements Runnable { public void onCreate() { new Thread(this).start(); } public IBinder onBind(Intent intent) { return null; } public void run() { } } 26. public class NossoServico extends Service implements Runnable { private static final int MAX = 10; protected int count; public void onCreate() { new Thread(this).start(); } public IBinder onBind(Intent intent) { return null; } public void run() { while(count < MAX) { Log.i("exemplo", "NossoServico em execucao..." + count); Thread.sleep(1000); count++; } } } 27. public class NossoServico extends Service implements Runnable { private static final int MAX = 10; protected int count; private boolean ativo; public void onCreate() { ativo = true; new Thread(this).start(); } public IBinder onBind(Intent intent) { return null; } public void run() { while(ativo && count < MAX) { Log.i("exemplo", "NossoServico em execucao..." + count); Thread.sleep(1000); count++; } stopSelf(); } } 28. public class NossoServico extends Service implements Runnable { private static final int MAX = 10; protected int count; private boolean ativo; public void onCreate() { ativo = true; new Thread(this).start(); } public IBinder onBind(Intent intent) { return null; } public void run() { while(ativo && count < MAX) { Log.i("exemplo", "NossoServico em execucao..." + count); Thread.sleep(1000); count++; } stopSelf(); } public void onDestroy() { ativo = false; } } 29. Crie uma tela com os botes iniciar e parar. Associe a tela Activity. Faa testes e acompanhe o LogCat. 30. Perceberam que iniciamos o servio com startService()? 31. E o bindService()? 32. Utilizamos o bindService() principalmente para nos conectarmos e manipularmos um servio, atravs da interface android.os.IBinder. 33. Para nos conectarmos ao servio, precisamos implementar corretamente o mtodo onbind(), que deixamos retornando nulo. 34. Vamos alterar o exemplo anterior para que seja possvel recurar o valor do contador. 35. Precisamos da interface de comunicao, por enquanto com um mtodo. public interface Contador { int count(); } 36. Precisamos da interface de comunicao, por enquanto com um mtodo. public interface Contador { int count(); } Nosso servio que dever implementar esta interface. 37. Refatorando nosso servio... 38. public class NossoServicoComConexao extends NossoServico { public IBinder onBind(Intent intent) { return null; } } 39. public class NossoServicoComConexao extends NossoServico implements Contador { public IBinder onBind(Intent intent) { return null; } } 40. public class NossoServicoComConexao extends NossoServico implements Contador { public IBinder onBind(Intent intent) { return null; } public int count() { return count; } } 41. public class NossoServicoComConexao extends NossoServico implements Contador { private final IBinder conexao; public IBinder onBind(Intent intent) { return null; } public int count() { return count; } } 42. public class NossoServicoComConexao extends NossoServico implements Contador { private final IBinder conexao; public IBinder onBind(Intent intent) { return conexao; } public int count() { return count; } } 43. public class NossoServicoComConexao extends NossoServico implements Contador { private final IBinder conexao = new LocalBinder(); public IBinder onBind(Intent intent) { return conexao; } public int count() { return count; } } 44. public class NossoServicoComConexao extends NossoServico implements Contador { private final IBinder conexao = new LocalBinder(); public IBinder onBind(Intent intent) { return conexao; } public int count() { return count; } public class LocalBinder extends Binder { } } 45. public class NossoServicoComConexao extends NossoServico implements Contador { private final IBinder conexao = new LocalBinder(); public IBinder onBind(Intent intent) { return conexao; } public int count() { return count; } public class LocalBinder extends Binder { public Contador getContador() { } } } 46. public class NossoServicoComConexao extends NossoServico implements Contador { private final IBinder conexao = new LocalBinder(); public IBinder onBind(Intent intent) { return conexao; } public int count() { return count; } public class LocalBinder extends Binder { public Contador getContador() { return NossoServicoComConexao.this; } } } 47. Registrando este novo servio no AndroidManifest.xml 48.