Ver mensagens sem resposta | Ver tópicos ativos Hoje é 19 Jun 2013, 09:25



Responder Tópico  [ 8 Mensagens ] 
 Criando uma aplicação em background 
Autor Mensagem
Anatomy of an App
Anatomy of an App

Data de registro: 02 Mar 2010, 15:28
Mensagens: 112
Mensagem Criando uma aplicação em background
Criando uma aplicação em background no Android

Olá, estou aqui para explicar neste post como criar uma aplicação para rodar em segundo plano. Tenho como exemplos algumas aplicações como: music play nativo do Android, que é possível escutar música e executar outras ações ao mesmo tempo. Também tem a aplicação do meebo, que é possível está conectado no MSN, GTALK, e etc. E esta executando outra tarefa qualquer.

O que será nossa aplicação?

Nossa aplicação será algo bem simples, vamos criar uma activity que irá inicializar um serviço, nesse seriviço, criaremos um laço de repetição para acompanhar o tempo de vida do serviço.

Criando a tela do projeto

Crie um XML para criar nossa tela. Neste XML adicione um textView e u Button.



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">



    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Iniciar um serviço" android:id="@+id/idTexto"/>


    <Button android:id="@+id/botao" android:text="Iniciar sevico"
        android:layout_width="210dip" android:layout_height="wrap_content">

    </Button>

</LinearLayout>
   

 


Configurando um serviço no androidManifest.xml

Para se configurar um serviço no androidManifest.xml é preciso criar uma TAG chamada de Service com um intent-filter e uma category. Em intent-filter é definido o nome do intent-filter que será usado para encontrar a classe Servico definida no nome do service e também é definida uma categoria padrão.


<service android:name=".Servico">
            <intent-filter>
                <action android:name="INICIAR_SERVICO" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
</service>

 


Criando a classe que inicializa o serviço

Para inicializar um serviço é simples, basta da um override no médoto de Activity startService() passando como parâmetro uma Intent.


startService(new Intent("INICIAR_SERVICO"));
 


Abaixo a classe completa:


public class InicializaServico extends Activity implements OnClickListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // obtema a referência do botão criado.
        Button init = (Button) findViewById(R.id.botao);

        // Seta um texto
        TextView text = (TextView) findViewById(R.id.idTexto);
        text.setText("Iniciando um Serviço");

        // Listener criado para o botão soma
        init.setOnClickListener(InicializaServico.this);

    }
    public void onClick(View v) {

        // Inicia o serviço a partir de INICIAR_SERVICO definido no
        // androidManifest.xml
        startService(new Intent("INICIAR_SERVICO"));

    }
 


Criando a classe Serviço

Para criar uma classe Service também é simples, Crie uma classe .java e herde de Service do pacote android.app.Service obrigatoriamente é preciso implementar o médoto IBinder, não vamos utilizar este método neste post. Em nível de conhecimento, este método serve para um processo se comunicar com outro processo. Dê um override no método onStart() da classe que herda Service. Dentro do método onStart(), chame o método incremento() que irá executar o processo de incrementação de valores. Para parar um serviço, é preciso chamar o método stopSelf(). Caso você não utilize o método stopSelf() o serviço vai ficar criado até o sistema operacional necessitar de memória. O método onStart() faz parte do ciclo de vida de um Service, que eu pretendo criar um post sobre o mesmo.

O método incremento

O método incremento é criado para acompanhar a execução do serviço criado. Este método, ele recebe um número como parâmetro e executa-o 10 vezes e executa o método sleeping de Thread passando como parâmetro 1000 milissegundo.
Abaixo o código completo:


public class Servico extends Service {

    public static final String CATEGORIA = "servico";

    @Override
    public void onStart(Intent intent, int startId) {

        incremento(0);
        stopSelf();
    }

    private void incremento(int result) {

        for (int i = 0; i < 10; i++) {

            try {
                Thread.sleep(1000);
                result++;
                Log.i(CATEGORIA, "incremento  " + result);
            } catch (InterruptedException e) {

                Log.i(CATEGORIA, "erro " + e);
            }
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

}
 


Testando a aplicação

Para testar a aplicação, crie no logCat do Eclipse ou MotoDev uma categoria com o nome “servico” feito isso, execute a aplicação, clique no botão iniciando serviço. Feito isto, pode sair da aplicação e executar qualquer tarefa que o serviço vai continuar criado e você poderá acompanhar a execução do serviço pelo logCat da IDE.


Douglas Alípio
http://www.douglasalipio.wordpress.com

_________________
http://www.douglasalipio.wordpress.com
Douglas Alípio Mesquita


03 Out 2010, 02:18
Perfil
Anatomy of an App
Anatomy of an App
Avatar de usuário

Data de registro: 12 Jan 2008, 21:16
Mensagens: 122
Mensagem Re: Criando uma aplicação em background
mais um excelente artigo!

Obrigado Douglas.


04 Out 2010, 11:44
Perfil
Anatomy of an App
Anatomy of an App

Data de registro: 02 Mar 2010, 15:28
Mensagens: 112
Mensagem Re: Criando uma aplicação em background
Vamos compartilhar conhecimento :D !

_________________
http://www.douglasalipio.wordpress.com
Douglas Alípio Mesquita


04 Out 2010, 11:56
Perfil
What is AVD?
What is AVD?

Data de registro: 21 Mar 2011, 14:47
Mensagens: 15
Mensagem Re: Criando uma aplicação em background
Consigo correr a aplicação. Mas se aumentar o ciclo de 10 para 100 por exemplo, aparece aquela janela a dizer que a aplicação nao esta a responder (Force close/Wait). É normal? Não há maneira de evitar isto?

Cumprimentos


08 Abr 2011, 10:08
Perfil
What is Android?
What is Android?

Data de registro: 12 Abr 2011, 09:50
Mensagens: 2
Mensagem Re: Criando uma aplicação em background
Eu não sou o mais experiente pra responder isso mas é o seguinte,

Esse service tá rodando na mesma thread da tua activity, ai por isso que deu essa bronca!
Pra evitar isso tu tem que criar uma thread pra executar esse service!
Ai acho que funciona de boa!


29 Abr 2011, 17:25
Perfil
What is Android?
What is Android?

Data de registro: 03 Jul 2011, 17:47
Mensagens: 3
Mensagem Re: Criando uma aplicação em background
Muito bom!
Mas caso eu queira iniciar o serviço quando o dispositivo for iniciado, como faço?


03 Jul 2011, 17:56
Perfil
What is Android?
What is Android?

Data de registro: 17 Fev 2012, 17:11
Mensagens: 8
Mensagem Re: Criando uma aplicação em background
ruddy.persivo escreveu:
Muito bom!
Mas caso eu queira iniciar o serviço quando o dispositivo for iniciado, como faço?



Opa tambem quero saber :D estou a procura disso e otima eplicação tambem estava a procura :D


07 Mar 2012, 12:35
Perfil
What is ADT?
What is ADT?

Data de registro: 14 Mar 2012, 09:49
Mensagens: 21
Mensagem Re: Criando uma aplicação em background
mvnocontele escreveu:
ruddy.persivo escreveu:
Muito bom!
Mas caso eu queira iniciar o serviço quando o dispositivo for iniciado, como faço?



Opa tambem quero saber :D estou a procura disso e otima eplicação tambem estava a procura :D


Da uma olhada aqui:
viewtopic.php?f=5&t=18843

talvez posso ajudar

abraço


13 Abr 2012, 14:36
Perfil
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 8 Mensagens ] 

Quem está online

Usuários vendo este fórum: Abraao, aechiara, alberto, Alex Marcelo Burnett, alexcost2002, allone, amarildolacerdas, andepunk, Andre Brito, andre.hebeler, andrelom, Andrey, arilsonm, arnaldo.miranda, Ask Jeeves, Avelino Mateus Neto, betofigu, bomcabelo, brpiassa, btleandro, cabelo, Cajux, carlosavasconcelos, cassiano, Catapan, Celso Jr., Chefe Nass, christian, CKorneLL, Clauber, Costa, d.paim, Danilo Dias, danilosv, Darkluna, Darth Sidious, Dirceu W. C. Conte, dirceuconte, dmd, Dookan, ederson_4, edson dias de gusmao, eliasmachado_rj, Eliezer Reis, erosvaldo, euguns, Everton Moreira, fabric01, fernando neves, flaviolemos, fmakula, freak, fredjpa, freina, furlanrapha, Gabriel, gabrielatme, genildof, grandebaro, guiba_picolino, gustavo, gutodias, ice, iuri_freire, ixian, JairoCN, jeanbr07, JeffCF, Jenius, jhonguitar, jlucasps, José Guilherme, juliana_costa, julianafsa, juliano, Juninhooooo, JuniorE, juniorsk8, klyff, kpinheiro, kristopher, laucode, Lelinho, lfalcao, lfirpo, LForce, lhdiassilva, Lincoln, LucasNascimento, lucianoalves, luciocamilo, luizcarlosvb, Mace Windu, Machado000, mapis, marcosandreao, marcosf63, Marini, mateusff, Meticore, mirelli, mravel, mrkensley, neuhaus, niloleite, nina.rm, nsansilva, Nute Gunray, oliveiramc, Orivalde, paint-horse, Paulo, pemam.com.br, phobos, phpower1, r.wil, ramonrabello, ramonsiebra, raninhofernandes, regeriob2br, reginaldofdias, Renan, retardad0, ricdigital, roberto caceres, robertofonte, robsonoracle, rogeriopgomes, rubens_olv, Samantha, Samuka, sasuke_sarutobi, siker C3PO, Synoo [Bot], tChAnDy, thanaptos, tiagocordeiro, ttaranto, valaszek, VIEIRIX, Webnet, wilson.slima, wylken, xikin, XPTO, yuri82, Zam Wesell e 1 visitante


Você não pode criar novos tópicos neste fórum
Você não pode responder tópicos neste fórum
Você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode enviar anexos neste fórum

Procurar por:

© 2007 - 2013 Portal Android - Comunidade de Desenvolvedores da Plataforma Android

Estamos no Linkedin    Siga-nos no twitter


Powered by phpBB - Hospedado por Bemobi