Android 이벤트 버스 프레임워크 Otto

3162 단어 otto
1. 이벤트버스의 클래스 라이브러리 다운로드
소스:https://github.com/square/otto
2. 기본 사용
@Subscribe
이벤트, 즉 이벤트의 처리자에 가입할 수 있으며 매개 변수가 Your Event만 있고 Subscribe마다 Your Event를 처리합니다.Event는 post와 구독을 연결하는 데 사용됩니다. @Subscribe 사용 예:
@Subscribe
public void reveiverMethod(YourEvent event){
   //...TODO 
}

@Produce
이벤트가 발생하면 변경 방법은 대상이register에 의해 호출됩니다. (- 사용 상황이 비교적 특수합니다.) 이 방법은 반드시 비어 있는 반환 값이 있어야 하고 매개 변수는 비어 있어야 합니다.bus.post(new YourEvent(…))
@Subcribe 처리를 기다리는 이벤트 보내기
public class MainActivity extends Activity {
 
    TextView tvShow;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        BusManager.getInstance().register(this);
        System.out.println(debug:onCreate);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btn_1).setOnClickListener(new OnClickListener() {
 
            @Override
            public void onClick(View arg0) {
                BusManager.getInstance().post(new MyEvent(       ,    ));
            }
        });
        tvShow = (TextView) findViewById(R.id.tv_show);
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        BusManager.getInstance().unregister(this);
    }
 
    @Subscribe
    public void receiveEventByParam(MyEvent event) {
        System.out.println(debug: + event.getContent());
        if (tvShow != null) {
            tvShow.setText(event.getContent());
        }
    }
 
    @Produce
    public MyEvent sendEvent() {
        return new MyEvent(        (@Produce));
    }
}

BusManager는 단일 예입니다.
public class BusManager {
    private static Bus bus = null;
    private BusManager() {
    }
    public static synchronized Bus getInstance() {
        if (bus == null) {
            bus = new Bus();
        }
        return bus;
    }
}

MyEvent 자체 정의 이벤트 클래스
public class MyEvent {
    private String content;
 
    public String getContent() {
        return content;
    }
 
    public void setContent(String content) {
        this.content = content;
    }
 
    public MyEvent(){
 
    }
 
    public MyEvent(String content) {
        super();
        this.content = content;
    }
 
}

실행 결과
05-20 20:41:59.923: I/System.out(30320): debug:        (@Produce)
05-20 20:41:59.923: I/System.out(30320): debug:onCreate
05-20 20:42:11.553: I/System.out(30320): debug:       ,    

registe () 방법을 호출할 때마다 @Produce 방법을 즉시 호출하여 리턴의 이벤트를 보내고 My Event의 @Subscribe 방법으로 받아서 처리합니다.bus.post()도 마찬가지입니다.
의 원리
주로 Bus.java의 코드:
중요한 방법은 다음과 같습니다.
public void register(Object object)

이 메서드는 object에서 Produce 및 Subscribe 메모가 있는 모든 메모를 찾아 Map에 저장하고 바로 Produce 메모를 실행하는 메서드를 사용합니다.
public void post(Object event)

이벤트 이벤트를 보내고 이전에 등록된 Object의 방법에 따라 이벤트의 Subscribe 방법을 찾고 invoke 방법을 찾습니다.이렇게 하면 post 이후에 대응하는 Subscribe 방법을 호출하는 목적에 도달할 수 있다.
public void unregister(Object object)

object를 취소하고 맵에 저장된 object를 삭제하는 방법으로 object를 방출하여 메모리 유출을 방지합니다.

좋은 웹페이지 즐겨찾기