수색…


비고

OttoRxJavaRxAndroid 를 위해 더 이상 사용되지 않습니다 . 이 프로젝트는 Otto와 동일한 이벤트 중심 프로그래밍 모델을 허용하지만, 더 많은 기능을 제공하며 스레딩을보다 잘 제어 할 수 있습니다.

이벤트 전달

이 예제에서는 오토 이벤트 버스를 사용하여 이벤트를 전달하는 방법을 설명합니다.

Android Studio 에서 Otto Event Bus를 사용하려면 모듈 gradle 파일에 다음 문장을 삽입해야합니다.

dependencies {
    compile 'com.squareup:otto:1.3.8'
}

우리가 전달하고자하는 이벤트는 간단한 Java 객체입니다.

public class DatabaseContentChangedEvent {
    public String message;

    public DatabaseContentChangedEvent(String message) {
        this.message = message;
    }
}

우리는 이벤트를 보내기 위해 버스가 필요합니다. 이것은 대개 싱글 톤입니다.

import com.squareup.otto.Bus;

public final class BusProvider {
    private static final Bus mBus = new Bus();

    public static Bus getInstance() {
        return mBus;
    }

    private BusProvider() {
    }
}

이벤트를 보내려면 BusProvider와 post 메소드 만 필요합니다. AsyncTask의 동작이 완료되면 여기에 이벤트를 보냅니다.

public abstract class ContentChangingTask extends AsyncTask<Object, Void, Void> {

    ...

    @Override
    protected void onPostExecute(Void param) {
        BusProvider.getInstance().post(
            new DatabaseContentChangedEvent("Content changed")
        );
    }
}

일정 수령

이벤트를 수신하려면 이벤트 유형을 매개 변수로 사용하여 메소드를 구현하고 @Subscribe 사용하여 주석을 @Subscribe 합니다. 또한 BusProvider 에서 객체의 인스턴스를 등록 / 등록 취소해야합니다 ( 이벤트 보내기 예제 참조).

public class MyFragment extends Fragment {
    private final static String TAG = "MyFragment";

    ...

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

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

    @Subscribe
    public void onDatabaseContentChanged(DatabaseContentChangedEvent event) {
        Log.i(TAG, "onDatabaseContentChanged: "+event.message);
    }
}

중요 : 해당 이벤트를 수신하려면 클래스의 인스턴스가 있어야합니다. 하나의 활동에서 다른 활동으로 결과를 보내려는 경우에는 일반적으로 그렇지 않습니다. 이벤트 버스의 유스 케이스를 확인하십시오.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow