热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

androidrxbus2.0封装,一个编译时注解的RxBus库Apollo

依赖于RxJava的编译时Android事件总线,并且支持Sticky(粘连)事件,以及多个Rx调度器.示例预览引入Apollo到项目中我们需要引入一个apt插件到我们的class

1460000006760407

依赖于RxJava的编译时Android事件总线,并且支持Sticky(粘连)事件,以及多个Rx调度器.

示例预览

1460000006255253

引入Apollo到项目中

我们需要引入一个apt插件到我们的classpath来开启注解处理功能.

buildscript {

repositories {

jcenter()

}

dependencies {

//Android注解处理工具

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

}

}

allProjects {

repositories {

maven { url "https://www.jitpack.io" }

}

}

增加apt插件到项目的build.gradle配置文件中,使用apt插件来开启注解处理功能.

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

dependencies {

apt "com.github.lsxiao.Apollo:processor:0.1.4-alpha.1"

compile "com.github.lsxiao.Apollo:apollo:0.1.4-alpha.1"

compile 'io.reactivex:rxandroid:1.2.1'//实际操作时请使用最新的rxandroid版本,这仅仅是一个示例.

}

使用方法

Init

在Application中初始化Apollo.

public class App extends Application {

@Override

public void onCreate() {

super.onCreate();

//注意!SubscriberBinderImplement 是由Apollo在编译时生成的代码.

//因为Apollo是java库,所以无法依赖于Android库(RxAndroid).

//所以你必须提供一个AndroidSchedulers.mainThread()调度器来初始化Apollo.

Apollo.get().init(SubscriberBinderImplement.instance(), AndroidSchedulers.mainThread());

}

}

绑定/解绑

你可以在基类中来绑定和解绑Apollo.

public abstract class BaseActivity extends AppCompatActivity {

private SubscriptionBinder mBinder;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(getLayoutId());

mBinder = Apollo.get().bind(this);

afterCreate(savedInstanceState);

}

@Override

protected void onDestroy() {

super.onDestroy();

mBinder.unbind();

}

protected abstract int getLayoutId();

protected abstract void afterCreate(Bundle savedInstanceState);

}

接收事件

在你喜欢的地方来接收事件.

默认使用

@Receive(tag = TAG)

public void receiveEvent(Event event) {

//do something.

}

无参使用

@Receive(tag = TAG)

public void showDialog(){

//show dialog.

}

多个Tag

@Receive(tag = {TAG1,TAG2})

public void showDialog(){

//show dialog.

}

只接受一次普通事件

//the event will be received only once.

@Receive(tag = TAG,type = Receive.Type.NORMAL_ONCE)

public void showDialog(){

//show dialog.

}

调度器

//the subscribeOn and observeOn support main, io, new, computation, trampoline, immediate schedulers.

//subscribeOn default scheduler is io.

//observeOn default scheduler is main.

@Receive(tag = TAG,subscribeOn = Receive.Thread.IO, observeOn = Receive.Thread.MAIN)

public void receiveUser() {

//do something.

}

接收sticky事件

@Receive(tag = TAG,type = Receive.Type.STICKY)

public void receiveEvent(Event event) {

//do something.

}

接收后清除该sticky事件

@Receive(tag = TAG,type = Receive.Type.STICKY_REMOVE)

public void receiveEvent(Event event) {

//do something.

}

接收后清除所有的sticky事件

@Receive(tag = TAG,type = Receive.Type.STICKY_REMOVE_ALL)

public void receiveEvent(Event event) {

//do something.

}

发送事件

//a normal event

Apollo.get().send(EVENT_SHOW_USER, new User("lsxiao"));

//a non-parameter event

Apollo.get().send(EVENT_SHOW_USER);

//a sticky event

Apollo.get().sendSticky(EVENT_SHOW_BOOK, new Book("A Song of Ice and Fire"));

Pull Requests(请求代码合并)

欢迎所有的 pull requests.

维护人

知乎 : @面条

Github : @lsxiao

开源许可

Copyright 2016 lsxiao, Inc.

Licensed under the Apache License, Version 2.0 (the "License");

you may not use this file except in compliance with the License.

You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an "AS IS" BASIS,

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions and

limitations under the License.



推荐阅读
  • Android 中的布局方式之线性布局
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 使用TabActivity实现Android顶部选项卡功能
    本文介绍如何通过继承TabActivity来创建Android应用中的顶部选项卡。通过简单的步骤,您可以轻松地添加多个选项卡,并实现基本的界面切换功能。 ... [详细]
  • 本文详细介绍了 `org.apache.tinkerpop.gremlin.structure.VertexProperty` 类中的 `key()` 方法,并提供了多个实际应用的代码示例。通过这些示例,读者可以更好地理解该方法在图数据库操作中的具体用途。 ... [详细]
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • 处理Android EditText中数字输入与parseInt方法
    本文探讨了如何在Android应用中从EditText组件安全地获取并解析用户输入的数字,特别是用于设置端口号的情况。通过示例代码和异常处理策略,展示了有效的方法来避免因非法输入导致的应用崩溃。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文详细介绍了如何在最新版本的Xcode中重命名iOS项目,包括项目名称、应用名称及相关的文件夹和配置文件。通过本文,开发者可以轻松完成项目的重命名工作。 ... [详细]
  • 本文探讨了如何利用RxJS库在AngularJS应用中实现对用户单击和拖动操作的精确区分,特别是在调整区域大小的场景下。 ... [详细]
  • hlg_oj_1116_选美大赛这题是最长子序列,然后再求出路径就可以了。开始写的比较乱,用数组什么的,后来用了指针就好办了。现在把代码贴 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 本文详细探讨了在Java中如何将图像对象转换为文件和字节数组(Byte[])的技术。虽然网络上存在大量相关资料,但实际操作时仍需注意细节。本文通过使用JMSL 4.0库中的图表对象作为示例,提供了一种实用的方法。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • Beetl是一款先进的Java模板引擎,以其丰富的功能、直观的语法、卓越的性能和易于维护的特点著称。它不仅适用于高响应需求的大型网站,也适合功能复杂的CMS管理系统,提供了一种全新的模板开发体验。 ... [详细]
author-avatar
牵绊2502897683
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有