Advertisement
  1. Code
  2. Coding Fundamentals
  3. Tools

Dica Rápida: Como Usar a Biblioteca EventBus

Scroll to top
Read Time: 6 min

() translation by (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Construindo um aplicativo Android que tem várias componentes ativos que comunicam uns com os outros pode se tornar tedioso. Para economizar tempo, os desenvolvedores muitas vezes acabam com componentes fortemente acoplados em seus aplicativos. EventBus é uma biblioteca open-source popular que foi criado para resolver esse problema usando o padrão publisher/subscriber.

Usando a biblioteca EventBus, você pode passar mensagens de uma classe para uma ou mais classes em apenas algumas linhas de código. Além disso, todas as classes envolvidas são completamente desacopladas uma da outra, levando a um codigo que é menos complexo e mais fácil de manter e depurar.

Nesta dica rápida, você vai aprender como usar a biblioteca EventBus, através da construção de um aplicativo Android simples, que exibe o status de carregamento do dispositivo. Porque as mudanças no status do carregamento são eventos do sistema, o aplicativo vai ter uma Activity que precisa receber informações de um BroadcastReceiver - cenário perfeito para se usar um event bus.

Pré-requisitos

Certifique-se de que você tem o ADT Bundle Eclipse configurado. Você pode baixá-lo a partir do site Android Developer.

1. Criar Novo Projeto

Inicie o Eclipse e crie uma nova aplicação Android. Nomeie a aplicação com EventBusSample. Escolha um nome de pacote único e defina o Minimum Required SDK para Android 2.2 e o Target SDK para o Android 4.4.

Create a new Android applicationCreate a new Android applicationCreate a new Android application

Nós mesmos vamos criar a Activity, então desmarque Create Activity e clique em Finish.

Deselect Create Activity and click FinishDeselect Create Activity and click FinishDeselect Create Activity and click Finish

2. Edite o Manifest

Este aplicativo tem um BroadcastReceiver que responda às seguintes ações:

  • android.intent.action.ACTION_POWER_CONNECTED
  • android.intent.action.ACTION_POWER_DISCONNECTED

Nomeie o BroadcastReceiver para ChargingReceiver e declare-o no arquivo AndroidManifest.xml.

1
<receiver android:name=".ChargingReceiver">
2
    <intent-filter>
3
        <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
4
        <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
5
    </intent-filter>
6
</receiver>

O app tem uma Activity para exibir o status de carregamento. Nomeie a DisplayActivity e declará-lo como mostrado abaixo.

1
<activity android:name=".DisplayActivity">
2
    <intent-filter>
3
        <action android:name="android.intent.action.MAIN"/>
4
        <category android:name="android.intent.category.LAUNCHER" />
5
    </intent-filter>            
6
</activity>

3. Adicione a Biblioteca EventBus

Baixe a versão mais recente da biblioteca EventBus como um JAR de Maven Central e adicione o JAR no diretório libs do seu projeto.

4. Crie a Classe ChargingEvent

Eventos de event bus são nada além de objetos que contêm a informação que precisa ser comunicado. Vamos atribuir ChargingEvent ao nome da classe que contém as informações passadas a partir do BroadcastReceiver à Activity. Esta é uma classe simples que tem apenas uma String para representar a informação. Ele também tem um construtor para definir o valor da string e um get para obter seu valor.

Crie um novo arquivo chamado ChargingEvent.java e adicione o seguinte código a ele:

1
package com.hathy.eventbussample;
2
3
public class ChargingEvent {
4
    private String data;
5
  
6
	public ChargingEvent(String data){			
7
		this.data = data;
8
	}
9
	
10
	public String getData(){
11
		return data;
12
	}
13
}

5. Crie uma Classe BroadcastReceiver

Criar uma nova classe chamada ChargingReceiver que estenda de BroadcastReceiver. Essa classe usa o event bus para publicar mensagens. Ele tem uma variável chamada de bus, que faz referência ao bus criado pela biblioteca EventBus. O bus é um singleton e você tem que usar o método getDefault para se referir a ele.

No método onReceive, nós criamos uma nova instância da classe ChargingEvent e adicionamos a nossa mensagem a ele. Aqui está uma mensagem de exemplo:

1
@14:23:20 this device started charging.

Para gerar esta mensagem, precisamos fazer o seguinte:

  • Use os métodos disponíveis na classe de Time para definir a tempo em que o evento ocorreu.
  • Concatene a string "este dispositivo começou a carregar | descarregar" com base na ação recebida. Se a ação for recebida Intent.ACTION_POWER_CONNECTED, o dispositivo está a carregando. Se for Intent.ACTION_POWER_DISCONNECTED, o dispositivo está a descarregar.

Uma vez que o objeto ChargingEvent tem a informação correta, é publicado no event bus, utilizando o método post. A implementação da classe ChargingReceiver agora deve ter esta aparência:

1
package com.hathy.eventbussample;
2
3
import de.greenrobot.event.EventBus;
4
import android.content.BroadcastReceiver;
5
import android.content.Context;
6
import android.content.Intent;
7
import android.text.format.Time;
8
9
public class ChargingReceiver extends BroadcastReceiver {
10
11
    private EventBus bus = EventBus.getDefault(); 
12
	
13
	@Override
14
	public void onReceive(Context context, Intent intent) {
15
		ChargingEvent event = null;
16
		
17
		// Get current time

18
		Time now = new Time();
19
		now.setToNow();		
20
		String timeOfEvent = now.format("%H:%M:%S");
21
		
22
		String eventData = "@" + timeOfEvent + " this device started ";
23
		if(intent.getAction().equals(Intent.ACTION_POWER_CONNECTED)){
24
			event=new ChargingEvent(eventData+"charging.");
25
		} else if(intent.getAction().equals(Intent.ACTION_POWER_DISCONNECTED)){
26
			event=new ChargingEvent(eventData+"discharging.");
27
		}
28
		
29
		// Post the event

30
		bus.post(event);
31
	}
32
33
}

Como você pode ver, a publicação de mensagens para o event bus tem apenas uma única linha de código. Além disso, o editor não precisa saber nada sobre o assinante(s).

6. Criar a Classe DisplayActivity

Criar uma nova classe chamada DisplayActivity. Esta classe é responsável por exibir as mensagens dos eventos publicados no event bus.

Esta classe também tem uma variável que faz referência o event bus. Como a biblioteca EventBus segue o padrão singleton, a exemplo do event bus disponível para essa Activity, é o mesmo que a instância à disposição do BroadcastReceiver.

Para permitir que uma classe para se inscrever em eventos bus, o método de register é invocado. Em nossa Activity, podemos chamá-lo no método onCreate.

Da mesma forma, para parar de receber eventos, o método unregister é invocado. Nós chamamos este método no método onDestroy para se certificar de todos os recursos são liberados.

A Activity tem uma layout muito básico, contendo apenas um TextView que exibe as mensagens. Portanto, não há necessidade de criar um layout para ele. Nós simplesmente usamos TextView como view do conteúdo de Activity.

Neste ponto, a implementação da classe DisplayActivity deve ficar assim:

1
package com.hathy.eventbussample;
2
3
import android.app.Activity;
4
import android.os.Bundle;
5
import android.widget.TextView;
6
import de.greenrobot.event.EventBus;
7
8
public class DisplayActivity extends Activity {
9
    
10
	private EventBus bus = EventBus.getDefault();
11
	
12
	private TextView view;
13
	
14
	@Override
15
	protected void onCreate(Bundle savedInstanceState) {	
16
		super.onCreate(savedInstanceState);
17
		
18
		view = new TextView(this);
19
20
		view.setTextSize(20f);
21
		view.setPadding(20, 20, 20, 20);
22
		view.setText("Waiting for events...");
23
		
24
		setContentView(view);
25
26
		// Register as a subscriber

27
		bus.register(this);
28
	}	
29
	
30
	@Override
31
	protected void onDestroy() {
32
		// Unregister

33
		bus.unregister(this);
34
		super.onDestroy();
35
	}
36
37
}

Cada classe que pretende receber eventos do event bus deve conter um método onEvent. O nome deste método é importante, porque a biblioteca EventBus usa a API de Reflexão Java para acessar este método. Tem um único parâmetro que se refere ao evento. No nosso caso, o parâmetro vai ser do tipo ChargingEvent.

Tudo o que fazemos neste método é anexar a última mensagem recebida para o conteúdo do TextView. A implementação do método onEvent parece com isso:

1
public void onEvent(ChargingEvent event){
2
    view.setText(view.getText() + "\n" + event.getData());
3
}

7. Execute e Teste

O aplicativo agora está pronto para ser testado. Compilar e executá-lo em um dispositivo físico Android. Uma vez que o aplicativo tenha terminado o lançamento, conectar e desconectar o cabo de alimentação de um par de vezes para ver a troca status de carregamento.

Conclusão

Neste tutorial, você aprendeu como usar a biblioteca EventBus, e quanto ela simplifica a comunicação entre classes. A biblioteca é otimizado para a plataforma Android e é muito leve. Isso significa que você pode usá-lo em seus projetos sem ter que se preocupar com o tamanho do seu app. Para saber mais sobre a biblioteca EventBus, visite o projeto no GitHub.

Seja o primeiro a saber sobre novas traduções–siga @tutsplus_pt no Twitter!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.