|
Página 1 de 1
|
[ 3 Mensagens ] |
|
[Tutorial] Thread em Android
| Autor |
Mensagem |
|
Guilherme Catanduva
What is Android?
Data de registro: 12 Set 2011, 21:34 Mensagens: 4
|
 [Tutorial] Thread em Android
Bom pessoal como eu sofri com isso no começo eu vou colocar aqui um tutorial bem rápido de Thread no Android. Bom primeiro de tudo é que você precisa saber que no Android nós precisamos de uma classe chamda Handler. Ele permite você fazer com que outras classes que implemente a interface Runneble troquem mensagens entre si e altere os estados dos objetos. Bom chega de bla bla bla, se que quiser saber um pouco mais sobre essa classe http://developer.android.com/reference/ ... ndler.html. O projeto: * Você vai precisar criar o projeto com o nome de testeThread * O pacote padrão será app.teste * Dentro desse pacote você irá criar as classes Processo que implementa Runneble e a classe TesteThreadActivity que extende Activity e implementa OnClickListener. ----- Classe Processo: package app. teste; import android. util. Log; import android. widget. Button; public class Processo implements Runnable{ public Processo (TesteThreadActivity testeThreadActivity ){ this. testeThreadActivity = testeThreadActivity; button = null; rodando = true; i = 0; } private int i; private TesteThreadActivity testeThreadActivity; private Button button; private static boolean rodando; public synchronized static boolean getRodando () { return rodando; } public synchronized static void setRodando (boolean _rodando ) { rodando = _rodando; } @Override public void run () { while (rodando ) { try { if (button == null) { testeThreadActivity. getHandler(). post(new Runnable() { @Override public void run () { button = testeThreadActivity. getButton(); button. setText(Integer. toString(i )); button = null; } }); } i++; Thread. sleep(1000); } catch (Exception e ) { Log. e("ERRO!!!", "Erro no método RUN:\n" + e. getMessage()); } } }} ----- Classe TetseThreadActivity: package app. teste; import android. app. Activity; import android. os. Bundle; import android. os. Handler; import android. util. Log; import android. view. View; import android. view. View. OnClickListener; import android. widget. Button; import android. widget. RelativeLayout; public class TesteThreadActivity extends Activity implements OnClickListener { private Handler handler; private Thread thread; private Button button; private RelativeLayout relativeLayout; public synchronized Button getButton (){ return this. button; } public synchronized Handler getHandler (){ return this. handler; } @Override public void onCreate (Bundle savedInstanceState ) { super. onCreate(savedInstanceState ); setContentView (R. layout. main); try { button = new Button(this); button. setText(Integer. toString(0)); button. setOnClickListener(this); relativeLayout = (RelativeLayout )findViewById (R. id. relativeLayout1); relativeLayout. addView(button ); handler = new Handler (); thread = new Thread(new Processo (this)); thread. start(); } catch (Exception e ) { Log. e("ERRO!!!", "Erro no método onCreate:\n" + e. getMessage()); } } @Override public void onClick (View v ) { if (thread != null) { Processo. setRodando(false); } } @Override protected void finalize () throws Throwable { this. thread. stop(); super. finalize(); }} * O main.xml deve ficar assim: <?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" android:weightSum="1"> <RelativeLayout android:layout_width="fill_parent" android:id="@+id/relativeLayout1" android:layout_height="fill_parent"> </RelativeLayout> </LinearLayout>
------------------------------------------------------------------------------------------------------------------------------------------------------------------ Bom vamos agora comentar o que foi feito. É bem simples você está criando dinamicamente na sua classe TesteThreadActivty um botão em uma posição default no seu RelativeLayout. Ele recebe o evento onClick que simplesmente para a thread principal. Após isso você instancia o Handler (o que irá fazer a mágica toda) e uma thread. Agora vamos ver o que a classe Processo faz. ela simplemente recebe no seu método construtor um objeto do tipo TesteThreadActivity, apartir dai ele simplemente roda o método Run que dentro tem algo curioso testeThreadActivity.getHandler().post() , ele chama o método post e é ele quem irá fazer uma "ponte" de conversação entre o seu objeto e sua thread. Tudo que você colocar dentro do segundo método Run ele irá sempre "atualizar" os objetos. Nada impede de que você crie uma outra classe no seu projeto que implemente a interface Runneble, e que faça toda a lógica com os estados dosseus objetos e no final você passe um instância dessa classe como parâmetro para o método . No final você deve ver um botão que irá atualizar o seu text de um e um segundo, caso você queira que ele pare apenas basta clicar nele. Bom pessoal esse é o meu primeiro tutorial na comunidade e como você podem ver eu fiz um código bem simples. Caso tenham dúvida postem. Abraço
|
| 16 Set 2011, 13:50 |
|
 |
|
antunes
Dalvik Virtual Machine
Data de registro: 05 Abr 2011, 03:47 Mensagens: 1890 Localização: Rio de Janeiro
|
 Re: [Tutorial] Thread em Android
Muito bom!!
Só o "thread.stop();" que não ficou muito legal, seta como false, como vc fez em outro lugar e deixa ela parar naturalmente.
Ahh.. deletei o outro tópico igual a esse, vamos deixa só esse aqui!
Abraços!
_________________Alexandre Antunes @a3b @bemobiMotorola Defy App: IpCalc : Source - Calculadora IP (Máscara, Gateway, Broadcast e Rede). APP: Guia Carioca - Guia para o turista que visita o Rio de Janeiro e para o carioca que quer conhecer mais sua cidade. App: MyPonto - Controle de frequência (ponto) pessoal. Campanha: Facilite sua vida e a dos outros usuários. Objetivo: Vamos colocar a tag [RESOLVIDO] no título do tópico quando o problema for resolvido.Use a ferramenta de busca do fórum e não espere tanto para que a sua dúvida seja respondida!Quer trabalhar comigo??
|
| 16 Set 2011, 17:27 |
|
 |
|
A H Gusukuma
Dalvik Virtual Machine
Data de registro: 17 Jul 2011, 10:55 Mensagens: 2023 Localização: São Paulo
|
 Re: [Tutorial] Thread em Android
Olá Só um detalhe, muda o while (rodando) para while (getRodando()) Motivo: não acessar um campo compartilhado por múltiplas threads sem sincronização.
_________________Abraços ___________ Novo App: CalcMat - Calculadora de materiais para concreto Blog: Agorandroid - sobre programação Android Twitter: @Agorandroid ___________ Campanha: Facilite sua vida e a dos outros usuários Netiqueta:Procure responder as sugestões. Quando encontrar a solução, coloque [Resolvido] no primeiro post o mais rápido possível. Lembre-se de agradecer às pessoas que ajudaram e poste a solução do problema.
|
| 20 Mar 2012, 14:54 |
|
|
|
Página 1 de 1
|
[ 3 Mensagens ] |
|
Quem está online |
Usuários vendo este fórum: adautox, Adeja, aechiara, Alexandre Castro, alsimoes, Analista, Andrey, ARAKINIDIO, ariostorecco, Biel, Bitor, blurkness, bocajunior88, bomcabelo, Bruto_JPO, BTalhadas, btleandro, btminzon, caliow, Captain Typho, Carlos, carminati, Catapan, cavenaghi, celiapinheiro, celson, cesao, charly, Clauber, cleber, Cynthia, DaDih*, Damiani Oliveira, Danilo Dias, Darth Vader, Dassi, DAVINCE, deborazb, Douglas Siviotti, edervieira, Eduardo - Brasil, EduardoYC, eloilton, Emanuella, Everton Moreira, fabiano_eletro, fabric01, felipedsilva, fernandofsf, flaviolemos, frances135, grandebaro, guilhermesmo, guitarro17, gutodias, helder84, hellbest, ice, Ielo8, ismaels, jairo, Jalerson, jasn, jcorreajr, jhhm_2008, joaquimfoto, juliancesar, juliano, JuniorE, klassmann, Legiao, Lelinho, lucianoalves, luiz.lago, luizcarlosvb, luizcesar, luizneto79, Lúcio Zanette, Moisés Souto, MpassosT, MSPRAFAEL, nardosnt, neuhaus, nivaldo, Obi-Wan Kenobi, oliveiramc, otpor, pamonteiro, persiomotta, Rafael Alencar, rafael.cioban, raninhofernandes, raragao, regeriob2br, rguadagnini, ricardo, ricardo_listadelphi, rocha, rsl_master, Rubens Prates, Rufino, sasuke_sarutobi, Shinigami, talves, Thelemita, Tiago Sousa Roch, Toks, tonylock, vilmartr, viniciusluiz, Wds, Wesleyceraso, wilson.slima, wylken, XPTO, Yuri e 3 visitantes |
|
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
|
|