관찰자 모드 EventBus

3431 단어
EventBus는 각 구성 요소 간의 통신을 간소화하고 우리의 코드 작성을 간단하게 하며 이벤트 발송자와 수신자(즉 결합을 해제한다는 뜻)를 효과적으로 분리하여 복잡하고 오류가 발생하기 쉬운 의존성과 생명주기 문제를 피할 수 있다.
 implementation 'org.greenrobot:eventbus:3.1.1'

의지하다
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EventBus.getDefault().register(this);
        MessageEvent messsge = new MessageEvent("  ");
        EventBus.getDefault().post(messsge);
    }
    @Subscribe(threadMode = ThreadMode.MAIN)//        
    public void Subscribe(MessageEvent messageEvent) {
        String message = messageEvent.getMessage();
        System.out.println(message);
    }
    public class MessageEvent{
        private String message;
        public  MessageEvent(String message){
            this.message=message;
        }
        public String getMessage() {
            return message;
        }

        public void setMessage(String message) {
            this.message = message;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);

    }
}

EventBus는 하위 스레드에서 데이터를 보내거나 하위 스레드에서 수신할 수 있지만 스레드 모드를 지정하려면
  • POSTING(기본값)은 이벤트 처리 함수의 라인이 이벤트를 발표하는 라인과 같은 라인임을 나타낸다.
  • MAIN은 이벤트 처리 함수의 스레드가 주 스레드(UI) 스레드에 있음을 나타내기 때문에 여기서 시간을 소모할 수 없습니다.
  • BACKGROUND는 이벤트 처리 함수의 스레드가 백엔드 스레드이므로 UI 작업을 수행할 수 없음을 나타냅니다.이벤트를 발표하는 루틴이 주 루틴 (UI 루틴) 이라면 이벤트 처리 함수는 백엔드 루틴을 열고, 이벤트를 발표하는 루틴이 백엔드 루틴이라면 이벤트 처리 함수는 이 루틴을 사용합니다.
  • ASYNC는 이벤트가 발표된 스레드가 어느 스레드든지 상관없이 이벤트 처리 함수는 항상 새로운 하위 스레드가 실행되며 UI 작업을 할 수 없음을 나타낸다.

  • 전재 대상:https://www.cnblogs.com/Ocean123123/p/11040655.html

    좋은 웹페이지 즐겨찾기