2016-11-22 5 views
2

우리의 안드로이드 앱은 현재 리플렉션을 사용하는 Otto EventBus를 사용합니다. 우리는 반사의 오버 헤드를 피하고 싶지만 유연성을 유지해야합니다. Guava's event bus 리플렉션을 사용합니까? GreenRobot 님은 어떻습니까?GreenRobot과 구아바의 EventBus가 리플렉션을 사용합니까?

그렇지 않으면 코드 생성 또는 이와 유사한 것을 사용합니까?

+0

GreenRobot EventBus3 대신 반사의 APT를 사용

EventBus.builder().addIndex(new MyEventBusIndex()).installDefaultEventBus(); // Now the default instance uses the given index. Use it like this: EventBus eventBus = EventBus.getDefault(); 
, AFAIK – EpicPandaForce

+1

당신이 "우리는 반사의 오버 헤드를 피하기 위해 싶다" 이것이 실제로 y의 문제인지 확인하십시오. 우리의 애플 리케이션? 우리 (Square)가 4 년 전에 Otto를 생성 한 코드를 프로토 타이핑 할 때 구독자의 수는 실제 차이를 만들기 위해 우스꽝 스럽습니다. 그리고 Dalvik 시대에 돌아 왔고 API 14+에 대한 주석 반영이 수정되기 전에도 마찬가지였습니다. 솔직히이 같은 코멘트는 실제로 문제가 아니며 정확하게 측정되지 않은 것을 최적화 한 결과입니다. –

+0

@Jake Wharton 우리는 그것을 측정하지 않았습니다. 엄지 손가락의 규칙에 따라 성능을 최적화하고 싶을 때 나는 반사를 피하려고합니다. 공유 할 수있는 데이터가 있다면 기꺼이 마음을 바꿀 것입니다. – Ginandi

답변

4

Otto는 절대로 GreenRobot의 EventBus만큼 기능이 많지 않았습니다. 예를 들어 스레딩 모드가 없기 때문에 좋은 처지입니다. 그리고 Otto는 RxJava에 찬성하여 더 이상 사용되지 않습니다. 이것은 많은 프로젝트 (개인적인 견해)에 대한 엄청난 과잉입니다.



그러나 반사 사용, GreenRobot EventBus 3.x is able to build an index in compilation time using APT보다는 런타임 반사를 줄이기 위해

.


http://greenrobot.org/eventbus/documentation/subscriber-index/

지수 전제 조건 : 만 @subscriber 방법이있는 가입자 및 이벤트 클래스가 공개되어 인덱싱 할 수 없습니다. 또한 Java 주석 처리 자체의 기술적 한계로 인해 @Subscribe 주석은 익명 클래스 내부에서 인식되지 않습니다.

buildscript { 
    dependencies { 
     classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 
    } 
} 



apply plugin: 'com.neenbedankt.android-apt' 

dependencies { 
    compile 'org.greenrobot:eventbus:3.0.0' 
    apt 'org.greenrobot:eventbus-annotation-processor:3.0.1' 
} 

apt { 
    arguments { 
     eventBusIndex "com.example.myapp.MyEventBusIndex" 
    } 
} 

그리고