본문 바로가기
Android

Android otto Event bus 라이브러리

by square_man_tile 2021. 1. 20.
728x90
반응형

오늘은 sqareup:otto 이벤트 버스를 소개합니다.

액티비티와 프래그먼트

액티비티와 다이얼로그

프래그먼트와 다이얼로그

....

등등 여러 화면들간의 데이터 전송을 구현하는데 있어 정말 편리한 라이브러리 입니다.

 

사용방법은 다음과 같습니다.

1. app gradle에 다음 항목을 추가해주세요.

implementation 'com.squareup:otto:1.3.7'

2. 프로젝트 내 어디에서나 사용 가능하도록 ottoBus 인스턴스를 생성해줍니다.

public class BusProvider extends Bus {
    private final Handler mHandler = new Handler(Looper.getMainLooper());
    private static final Bus BUS = new Bus();
    public static Bus getInstance(){
    	return BUS;
    }
    private BusProvider(){}
    @Override public void post(Object event) {
    	if(Looper.myLooper() == Looper.getMainLooper()) {
        	super.post(event); 
        } else{
        	mHandler.post(new Runnable() {
            	@Override public void run() {  
                	BusProvider.super.post(event);                    
				}                
			});            
		}        
	}    
}

 

3. 이 버스에 태워서 보낼 데이터 클래스를 생성해줍니다. (새로운 자바파일)

public class BusEvents {
	public static class 598번버스{
    	private String 승객; //버스에 태워 보낼 데이터
        public 598번버스(String 승객){//598번버스 클래스 생성자
        	this.승객 = 승객;
		}
        public String get승객(){ //데이터가 필요한 지점에서 사용할 get 함수
        	return 승객;
		}
	}
}

 

4. 버스 출발시키기

우리는 앞서 BusProvider 클래스를 생성해서 otto Bus 인스턴스를 만들어뒀습니다.

데이터를 보내는 지점에서 다음과 같이 코드를 작성합니다.

BusProvider.getInstance().post(new BusEvents.598번버스(데이터));

이제 '598번버스' 클래스에 '데이터'라는 승객을 태운 상태로 버스가 출발합니다.

5. 데이터 받기

출발한 버스의 승객을 받기 위해 다음과 같이 코드를 작성합니다.

private String myString;

@Subscribe
public void get598번버스(BusEvents.598번버스 598번버스){
	myString = 598번버스.get승객();
}

이제 myString 변수에 598번버스 승객의 이름이 전달되었습니다.

6. 주의할 점

이 버스를 사용할 때는, 항상 onPause(), onResume()에 register와 unregister를 해주어야합니다.

안그러면 메모리 누수가 발견되며 앱이 뻗어버릴 수 있습니다.

 

@Override protected void onResume() {
	super.onResume();
    BusProvider.getInstance().register(this);
}

@Override protected void onPause() {
	super.onPause();
    BusProvider.getInstance().unregister(this);
}

otto Bus의 최신 버전은 아래 링크에서 확인 가능합니다.

https://github.com/square/otto

 

728x90
반응형
LIST