Android 이벤트 버스 프레임워크 Otto
3162 단어 otto
소스: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를 방출하여 메모리 유출을 방지합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
otto로 Fuelphp를 구축해 보았습니다.처음의 투고로 이르지 않는 곳이 많이 있다고는 생각합니다만, 흥미가 있어 「otto」를 접해 보았으므로 비망록으로서 투고시키고 받았습니다. Mac Book Pro OSX El Capitan Vagrant 1.7.4 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.