두개의 액티비티에서 쉐어할 수 있는 클래스의 인스턴스를 만들어서 사용하세요. 간단하게는 Application을 상속받아 하위클래스를 만드신 다음, 여기에서 애플리케이션 스콥의 객체를 하나 생성하시면 됩니다.
아니면 싱글톤 패턴을 사용하셔서 싱글톤 객체를 만드신 다음 이걸 공유하셔도 되구요. 아래에 Publisher - Subscriber 패턴을 이용한 순수 자바 솔루션을 참고하세요.
public class BLEEvent {
private final boolean connected;
BLEEvent(boolean connected) {
this.connected = connected;
}
public boolean isConnected() {
return connected;
}
}
interface BLESubscriber {
void onChanged(BLEEvent event);
}
public class BLEEventBus {
private BLEEvent lastEvent;
private final Set<BLESubscriber> subscribers = new HashSet<>();
private BLEEventBus() {
}
public void subscribe(BLESubscriber subscriber) {
subscribers.add(subscriber);
// 새로운 Subscriber 등록시 자동으로 마지막 이벤트를 내보냄.
if (lastEvent != null) {
subscriber.onChanged(lastEvent);
}
}
public void unsubscribe(BLESubscriber subscriber) {
subscribers.remove(subscriber);
}
public void publish(BLEEvent event) {
this.lastEvent = event;
for (BLESubscriber subscriber : subscribers) {
subscriber.onChanged(event);
}
}
public static BLEEventBus getInstance() {
return Impl.INSTANCE;
}
// static inner class를 이용한 싱글톤 객체 만들기
private static class Impl {
static BLEEventBus INSTANCE = new BLEEventBus();
}
}
public class BLEEventBusPublisher {
private final BLEEventBus eventBus;
public BLEEventBusPublisher(BLEEventBus eventBus) {
this.eventBus = eventBus;
}
public void publish(BLEEvent event) {
eventBus.publish(event);
}
}
public class BLEEventBusSubscriber {
private final BLEEventBus eventBus;
public BLEEventBusSubscriber(BLEEventBus eventBus) {
this.eventBus = eventBus;
}
public void subscribe(BLESubscriber subscriber) {
eventBus.subscribe(subscriber);
}
public void unsubscribe(BLESubscriber subscriber) {
eventBus.unsubscribe(subscriber);
}
}
//MainActivity
final BLEEventBusPublisher eventPublisher = new BLEEventBusPublisher(BLEEventBus.getInstance());
// 블루투스 연결시
eventPublisher.publish(new BLEEvent(true));
//SsidActivity
final BLEEventBusSubscriber eventSubscriber = new BLEEventBusSubscriber(BLEEventBus.getInstance());
@Override
public void onChanged(BLEEvent event) {
//여기에 필요한 처리
}
// onStart라이프사이클 이벤트에 Subscribe를 등록
@Override
public void onStart() {
super.onStart();
eventSubscriber.subscribe(this);
}
// onStop라이프사이클 이벤트에 Subscribe를 해제
@Override
public void onStop() {
super.onStop();
eventSubscriber.unsubscribe(this);
}