• EventBus3.0源码分析(一)两种使用方式


    EventBus在3.0及以上版本中加入了以APT(Annotation Processing Tool)实现的方式,但他还是保留了之前反射的实现方式。下面将展示两种实现方式使用上的区别。

    一、反射的方式

    implementation("org.greenrobot:eventbus:3.3.1")

    和之前版本一样,build.gradle文件中只引入eventbus依赖即可。

    二、APT 注解处理器的方式

    需要在build.gradle文件中写入以下内容:

    1. android {
    2. defaultConfig {
    3. ......
    4. javaCompileOptions {
    5. annotationProcessorOptions {
    6. //com.example.view:你的包名
    7. //MyEventBusIndex:EventBus注解处理器生成类的类名(可自定义)
    8. arguments = [ eventBusIndex : 'com.example.view.MyEventBusIndex' ]
    9. }
    10. }
    11. }
    12. }
    13. dependencies {
    14. implementation("org.greenrobot:eventbus:3.3.1")
    15. //EventBus的注解处理器
    16. annotationProcessor "org.greenrobot:eventbus-annotation-processor:3.3.1"
    17. }

    以Activity中的使用方式举例:

    1. public class MainActivity extends AppCompatActivity {
    2. @Override
    3. protected void onCreate(Bundle savedInstanceState) {
    4. super.onCreate(savedInstanceState);
    5. setContentView(R.layout.activity_main);
    6. EventBus.getDefault().register(this);
    7. }
    8. /**
    9. * threadMode:线程模式,在哪个线程执行这个onEvent()方法
    10. * sticky:是否是粘性事件
    11. * priority:优先级,值越大优先级越高
    12. */
    13. @Subscribe(threadMode = ThreadMode.MAIN,sticky = true,priority = 5)
    14. public void onEvent(String a){
    15. }
    16. @Override
    17. protected void onDestroy() {
    18. super.onDestroy();
    19. if (EventBus.getDefault().isRegistered(this)){
    20. EventBus.getDefault().unregister(this);
    21. }
    22. }
    23. }

    然后点击Android studio工具栏的build中的Make Moudle,使得EventBus生成一个索引类(上面build.gradle中定义的类名)。这里需要注意的是一定要至少定义一个@Subscribe注解修饰的方法之后再构建moudle,否则不会生成索引类。因为索引类的主要作用就是记录@Subscribe注解修饰的方法。

    随后在Application中调用以下方法:

    1. public class MyApp extends Application {
    2. @Override
    3. public void onCreate() {
    4. super.onCreate();
    5. EventBus eventBus = EventBus.builder().addIndex(new MyEventBusIndex()).build();
    6. }
    7. }

    到此,就可以以APT的实现方式使用EventBus了。不了解APT的同学可以去自行了解一下,其引入APT替代反射方式的目的主要是为了优化使用反射带来的性能消耗。

    接下来本系列文章将按照方法的调用顺序来进行源码分析:

    1. 1. EventBus eventBus = EventBus.builder().addIndex(new MyEventBusIndex()).build();
    2. 2. EventBus.getDefault().register(this);
    3. 3. EventBus.getDefault().post("");
    4. 4. EventBus.getDefault().unregister(this);

  • 相关阅读:
    Opencv中的直方图均衡
    Linux下调试代码——gdb的使用
    【自撰写】【国际象棋入门】第7课 常见战术分析(二)牵制、驱赶和腾挪
    RichView TRVStyle 模板样式的设置与使用
    【算法刷题day29】Leetcode:491.递增子序列 46.全排列 47.全排列 II
    #机器学习--高等数学基础--第一章:函数与极限
    国产企业级低代码开发哪个最好?这一款超好用
    关于redis客户端lettuce连接被服务器端关闭而造成连接重置导致操作失败的问题
    IDA动态调试apk
    温故而知新——vue常用语法(三)页面 loading&过滤器&列表过渡
  • 原文地址:https://blog.csdn.net/qq_27246079/article/details/125562373