필자는 Fragment 끼리간의 통신에 있어 Flagment -> Acitivity - > Flagment가 너무 불편해서 이벤트버스를 이용하여 해결한 적이 있다.
Rx를 사용한다면 이벤트 버스를 사용하지 않아도 된다.
RxJava Class
Observable : 이벤트를 발생시키는 주체
Subscriber : 이벤트를 전달 받는 객체
PublishSubject : 구독한 시점으로부터 발생되는 이벤트를 계속 전달 받는다. <- 요것을 이용하여 구현할 것이다.
등등.
/**
* Created by kinamare on 2017-05-12.
*/
public class RxEventManager {
private static RxEventManager mInstance;
private PublishSubject<Object> mData;
private RxEventManager(){
mData = PublishSubject.create();
}
public static RxEventManager getInstance(){
if(mInstance == null) {
mInstance = new RxEventManager();
}
return mInstance;
}
public void sendData(Object data){
mData.onNext(data);
}
public rx.Observable<Object> getObjectObservable(){
return mData;
}
}
2초 2초 간격을 주고
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this, ViewActivity.class);
startActivity(intent);
new Thread(new Runnable() {@Override
public void run() {
try {
Thread.sleep(2000);
RxEventManager.getInstance().sendData("스타크래프트2");
Thread.sleep(2000);
RxEventManager.getInstance().sendData("망겜");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
새로만든 프로젝트라 버터나이프나, 데이터바인딩은 사용하지 않았다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view);
textView = (AppCompatTextView) findViewById(R.id.activity_view_test_tv);
RxEventManager.getInstance().getObjectObservable()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Object>() {
@Override
public void onCompleted() {
Log.d(TAG,"finish");
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(Object o) {
textView.setText(o.toString());
}
});
}
자 그럼 테스트만 남았다.
잘 작동하니 잠을 청하러 가야겠다.
참고 : http://blog.fobid.me/2 블로그
'Android > 미분류' 카테고리의 다른 글
안드로이드 객체 추출 삼주일차 (0) | 2017.08.14 |
---|---|
안드로이드 객체 추출 이주일차 (0) | 2017.08.14 |
안드로이드 객체 추출 일주일차 (0) | 2017.08.14 |
이벤트 버스 대신 혼날 각오하고 RxJava를 사용하여 실제 프로젝트에 녹여보기 (0) | 2017.05.14 |
RxJava를 이용한 Reactive Programming (0) | 2017.05.01 |