IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> EventBus3.0源码分析(一)两种使用方式 -> 正文阅读

[移动开发]EventBus3.0源码分析(一)两种使用方式

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

一、反射的方式

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

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

二、APT 注解处理器的方式

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

android {

    defaultConfig {
        ......

        javaCompileOptions {
            annotationProcessorOptions {
                //com.example.view:你的包名
                //MyEventBusIndex:EventBus注解处理器生成类的类名(可自定义)
                arguments = [ eventBusIndex : 'com.example.view.MyEventBusIndex' ]
            }
        }
    }
}

dependencies {
    implementation("org.greenrobot:eventbus:3.3.1")
    //EventBus的注解处理器
    annotationProcessor "org.greenrobot:eventbus-annotation-processor:3.3.1"
}

以Activity中的使用方式举例:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //需使用Application中的EventBus对象,如使用EventBus.getDefault()获取eventbus对象将还是走反射的实现方式
        MyApp.getEventBus().register(this);

    }

    /**
     * threadMode:线程模式,在哪个线程执行这个onEvent()方法
     * sticky:是否是粘性事件
     * priority:优先级,值越大优先级越高
     */
    @Subscribe(threadMode = ThreadMode.MAIN,sticky = true,priority = 5)
    public void onEvent(String a){

    }
   

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (MyApp.getEventBus().isRegistered(this)){
            MyApp.getEventBus().unregister(this);
        }
    }
}

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

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

public class MyApp extends Application {
    private static EventBus eventBus;
    @Override
    public void onCreate() {
        super.onCreate();
         this.eventBus = EventBus.builder().addIndex(new MyEventBusIndex()).build();
    }
    
    public static  EventBus getEventBus(){
        return eventBus;
    }
}

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

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

 1. EventBus eventBus = EventBus.builder().addIndex(new MyEventBusIndex()).build();
 
 2. EventBus.getDefault().register(this);

 3. EventBus.getDefault().post("");

 4. EventBus.getDefault().unregister(this);

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 23:03:58  更:2022-07-04 23:05:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 2:36:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码