StateFramework——Android状态通知通信快速开发框架
来源:互联网 发布:js 二维数组匹配 编辑:程序博客网 时间:2024/04/26 06:02
StateFramework
简介
StateFramework 以 “状态观察者” 事件为核心的高内聚、低耦合开发框架,兼容性高。
优点
- 本框架提供代码、注解两种方式实现框架使用
- 注解只存在于编译期,不存在因为注解而造成的性能问题
GIT
https://github.com/CimZzz/StateFramework
当前版本
0.3.1
下载方法
使用前请确认 buildscript 下 gradle 版本要大于 2.2.0
compile 'com.virtualightning.library:stateframework:0.3.1'annotationProcessor 'com.virtualightning.library:stateframework-compiler:0.3.1'//StateFramework注解处理器,如果你不想用注解的方式绑定可注释此行
核心功能 : 状态观察者
状态观察者简介
“状态”属于无阈值抽象状态,仅作为唯一标识,而 stateId(状态ID)则是其实体
每个 Observer(状态观察者)对应一个 stateId,如果需要 Observer 执行动作时,可以依靠 stateId 进行通知。
如果想要使用 Observer,必须要有一个 StateRecord(状态记录者)作为 Observer 的集合,以 “key - value” 使 stateId 和 Observer 之间建立联系也就是说每个 Observer 必须所属于 StateRecord , StateRecord 与 Observer 属于一对多的关系。
状态观察者的使用
首先需要一个 StateRecord 的实例
StateRecord stateRecord = StateRecord.newInstance(null);//参数为 ClassKey ,注册全局状态观察者时作为所属类型的唯一标识
然后以代码的方式或者注解的方式注册 Observer
- 代码方式,通过 ObserverBuilder 构建 Observer 所需参数并完成注册
ObserverBuilder observerBuilder = new ObserverBuilder() .stateId("S_1")//状态ID,类型为 String .allowStop(false)//是否运行暂停状态 .refType(ReferenceType.WEAK)//状态观察者被持有的引用类型(影响内存泄露) .runType(RunType.MAIN_LOOP)//状态观察者执行类型 .observer(new BaseObserver() { @Override public void notify(Object... objects) { //通知 Observer 之后所做的一些事 } });stateRecord.registerObserver(observerBuilder);//注册内部状态观察者//stateRecord.registerWholeObserver(observerBuilder);注册全局状态观察者,ClassKey 为空时会抛出异常
- 注解方式,需要委托对象与委托方法,下列以 DemoActivity 为例 (需要添加注解解释器的依赖)
public class DemoActivity extends Activity { StateRecord stateRecord; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); stateRecord = StateRecord.newInstance(DemoActivity.class); Analyzer.analyzeState(this,stateRecord);//绑定 DemoActivity 的注解到指定的 StateRecord 上 } @BindObserver( stateId = "S_1",//注册状态ID allowStop = false,//是否允许停止 runType = RunType.MAIN_LOOP,//运行类型,当前为运行在主线程 isVarParameters = true,//是否使用自变长参数 isWholeObserver = false//是否为全局状态观察者 ) void onNotifyState_1(Object... args) { //通知 Observer 之后所做的一些事 }}
完成注册,下面就是通知方法
stateRecord.notifyState("S_1");stateRecord.notifyState("S_1",1,2,3,4);//如果你需要传递参数可以这样
全局状态观察者
StateRecord.notifyWholeState("S_1");//通知全部订阅 "S_1" 的状态观察者
当然也可以通知指定的全局状态观察者
StateRecord.notifyWholeState(ClassKey,"S_1");//通知指定 ClassKey 订阅 "S_1" 的状态观察者
注销状态
使用完之后最好是注销状态
stateRecord.unregisterObserver();
如果注册了全局状态但并未注册,可能会导致内存泄露
关于 allowStop 属性
如果注册 Observer 时启用 allowStop,那么可以通过改变 StateRecord 的状态实现临时禁用 Observer
stateRecord.setRecordState(false);
当 StateRecord 的状态为 false时(stop),通知将不会抵达启用 allowStop 的状态观察者
关于@BindObserver中的 isVarParameters 属性
如果你明确知道委托函数所需的参数类型,可以禁用 isVarParameters ,通知 Observer 所携带的参数会自动转型填充委托函数参数列表
@BindObserver( stateId = "S_1",//注册状态ID isVarParameters = false)void onNotifyState_1(String str1,Integer i) {//通知 Observer 之后所做的一些事}
可以使用下列通知方式
stateRecord.notifyState("S_1","HelloWorld",520);
不过需要注意的是,当禁用了 isVarParameters 时,通知时所传递的参数类型、顺序、长度必须严格遵守委托函数定义的参数列表,否则会抛出异常
辅助功能 : 注解绑定注入 (需要添加注解解释器的依赖)
绑定View
使用 @BindView 绑定控件
public class DemoActivity extends Activity { @BindView(R.id.list)// id 为 R.id.list 必须存在于 R.layout.main ListView list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Analyzer.analyzeView(this);//绑定 DemoActivity 的控件 }}
绑定资源
public class DemoActivity extends Activity { //资源id = R.array.mainItem , 资源类型 = 字符串数组 @BindResources(resId = R.array.mainItem,type = ResType.STRING_ARRAY) String[] strArray; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Analyzer.analyzeResources(this);//绑定 DemoActivity 的资源 }}
绑定事件
以点击事件为例,更多事件请参考注解类型集合
public class DemoActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Analyzer.analyzeEvent(this);//绑定 DemoActivity 的资源 } @OnClick(R.id.list) void OnClick() { //点击事件处理的一些事 }}
其余暂未上线功能
- HTTP协议相关
- 数据库相关
AndroidStudio 插件
布局快速注入工具安装指南
联系方式
绑定资源 和 事件绑定并不全面,目前只涉及到我项目用的到的,如果需要扩展更多自动注解绑定请联系我
QQ邮箱 : 1152564696@qq.com
QQ : 1152564696
- StateFramework——Android状态通知通信快速开发框架
- Android——Notification状态通知栏
- android快速开发框架
- android 快速开发框架
- android快速开发框架
- android快速开发框架
- android快速开发框架
- android快速开发框架
- android快速开发框架
- android 快速开发框架
- Android快速开发框架
- Android快速开发框架
- Android快速开发框架
- Android快速开发框架
- Android 快速开发框架
- Android快速开发框架
- Android快速开发框架
- android快速开发框架
- 【第18题】360校园招聘2015届技术类笔试题
- 搭建Eclipse开发环境
- Object源码阅读
- Java各种版本的区别
- 删除任务
- StateFramework——Android状态通知通信快速开发框架
- 改变Maven内置Tomcat的服务端口
- 【第19题】360校园招聘2015届技术类笔试题
- 利用外部变量将一个数按位累加后逆序输出
- day06总结
- 线段树区间求和——敌兵布阵
- 学习日记-多态
- 我的第一个OpenGL程序
- 【第20题】360校园招聘2015届技术类笔试题