Android跨线程通信状态框架Simple2Develop【更新至0.2.0】
来源:互联网 发布:安卓息屏录像软件 编辑:程序博客网 时间:2024/06/06 16:59
基本信息
Simple2Develop 是一款基于Android平台的跨线程通信框架,可以让你以一种简单的方式进行复杂的通信,支持同进程中多Activity之间即时交互,子线程与主线程之间的交互等等。对通信的方式进行了解藕。
配置方式
此框架已经上传至 JCenter ,使用Gradle方式:
compile 'com.virtualightning.library.simple2develop:simple2develop:0.2.0'
项目Github托管:
https://github.com/CimZzz/Simple2Develop
框架介绍
在介绍之前首先看下结构图
StateManager(Singleton)
StateManager(状态管理者)是一个单例,用于创建 StateRecord,目前暂无其他作用,只是作为一个Generator,将来可能会在此基础上对 StateRecord 进行统一管理。
StateRecord
StateRecord(状态记录)是此框架的核心类,其中维护了一个全局静态表用于存储全局 StateMediator 和一个存储监控 StateMediator 状态的内部表,使用者可以通过状态的解析生成监控的状态(配合使用Analyzer)。
当监控的状态为全局状态时,会从全局静态表内找到对应状态并进行克隆,实现同一状态的多重监控;如果监控状态为私有状态时,则会实例化一个新的 StateMediator 置入监控表内。(注意监控的状态名应唯一)
InternalState
InternalState(内部状态)标识着 StateRecord 的状态,用于判断 StateRecord 当前的状态,主要用于控制对Observer的通知时机。
Observer
Observer(状态观察者)作用是当其监控的状态发生改变时所作出的响应操作。一个状态只能对应一个Observer,并且 Observer 的操作始终运行在主线程。
State
State(状态对象)保存着一个状态值(true or false)和多个 StateMediator。当其中状态发生改变时(无论状态是否真正的改变),都会通知 StateMediator 将状态发布给 Observer,最终由 Observer 决定此状态事件是否执行相应的操作。
StateMediator
StateMediator(状态中介)会保存一个 State 的引用和一个 Observer 的弱引用。当状态发生变化时,StateMediator 会将变化的结果发送给 State 进行状态变化,然后 State 再将变化结果发布给所有监控此状态的StateMediator ,再由其根据运行环境转发给 Observer
MemoryObserver
MemoryObserver(记忆性状态观察者)是 Observer 的一个子类,作用是每次通知状态变化时都会将最近的状态进行保存,如果此次的通知的状态与上一次状态一致时,则不会执行其中操作
PassiveObserver
PassiveObserver(被动状态观察者)是 Observer 的一个子类,作用是每次通知状态变化时都会执行其中操作。
以上就是此框架中核心的类。
框架使用
package com.virtualightning.simple2develop.state;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import com.virtualightning.library.simple2develop.state.AnalyzeGlobalState;import com.virtualightning.library.simple2develop.state.AnalyzeState;import com.virtualightning.library.simple2develop.state.AnalyzeView;import com.virtualightning.library.simple2develop.state.Analyzer;import com.virtualightning.library.simple2develop.state.PassiveObserver;import com.virtualightning.library.simple2develop.state.StateManagement;import com.virtualightning.library.simple2develop.state.StateRecord;import com.virtualightning.library.simple2develop.ui.ActionBarUI;import com.virtualightning.library.simple2develop.ui.ActionBarUICreater;import com.virtualightning.simple2develop.R;/** * Created by CimZzz on 16/8/24.<br> * Project Name : Virtual-Lightning Simple2Develop<br> * Since : VLSimple2Develop_0.1.8<br> * Description:<br> *//*监控全局状态,状态名为 “GS_0”*/@AnalyzeGlobalState(StateRecordActivity.GLOBAL_STATE_0)/*监控私有状态,状态名为 “0” ,初始状态为 true*/@AnalyzeState( stateNames = {StateRecordActivity.STATE_0}, states = {true})public class StateRecordActivity extends ActionBarUI { public static final String GLOBAL_STATE_0 = "GS_0";//全局状态 public static final String STATE_0 = "0";//私有状态 private StateRecord stateRecord;//状态记录 /*使用注解快速绑定控件*/ @AnalyzeView(R.id.state_tv) private TextView tv; @AnalyzeView(R.id.state_btn) private Button btn; @Override protected void onBaseUICreate(ActionBarUICreater creater) { creater.setLayoutID(R.layout.state); /*注册全局状态,建议在自定义 Application 类中进行此操作,状态名最好使用静态常量声明*/ StateRecord.registGlobalState(GLOBAL_STATE_0,true);//注册一个全局状态,状态名为 “GS_0” ,初始状态为 true /*通过状态管理生成一个临时的状态记录*/ stateRecord = StateManagement.getInstance().getTempStateRecord(null); } @Override protected void onViewInit(Bundle savedInstanceState) { /*根据注解解析控件并绑定控件*/ Analyzer.analyzeView(this); /*根据注解监控状态*/ Analyzer.analyzeState(stateRecord,this); /*为 Button 注册一个事件*/ btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { /*启动一个线程模拟耗时处理*/ new Thread(new Runnable() { @Override public void run() { /*模拟通过耗时操作获得结果*/ String result = "123456"; /*通知私有状态发生改变,改变后状态为 true,附加额外的参数为一个字符串*/ stateRecord.changeState(STATE_0,true,result); } }).start(); } }); /*注册状态观察者*/ /*注册一个活性状态观察者(当 StateRecord 的内部状态每次变更为 RunState 时,都会自动激活状态观察者)*/ /*将状态观察者绑定给监控的全局状态*/ /*PassiveObserver 为被动状态,表示每次状态激活时都会执行对应状态的操作,其构造参数表示当 StateRecord 处于非 RunState 时,不执行操作*/ stateRecord.registActiviteObserver(GLOBAL_STATE_0, new PassiveObserver(false) { /*当处于 true 状态时执行的操作*/ @Override protected void trueStateUpdate(Object... arg) { /*将 TextView 的文本置为 HelloWord */ tv.setText("HelloWord!"); } /*当处于 false 状态时执行的操作*/ @Override protected void falseStateUpdate(Object... arg) { //不执行任何操作 } }); /*注册一个惰性状态观察者(当 StateRecord 的内部状态每次变更不会自动激活状态观察者)*/ /*将状态观察者绑定给监控的私有状态*/ /*PassiveObserver 为被动状态,表示每次状态激活时都会执行对应状态的操作,其构造参数表示当 StateRecord 处于非 RunState 时,不执行操作*/ stateRecord.registInactiveObserver(STATE_0, new PassiveObserver(false) { /*当处于 true 状态时执行的操作*/ @Override protected void trueStateUpdate(Object... arg) { /*将 TextView 的文本置为传递过来的参数 */ String result = (String) arg[0]; tv.setText(result); } /*当处于 false 状态时执行的操作*/ @Override protected void falseStateUpdate(Object... arg) { //不执行任何操作 } }); } /*监控状态记录内部状态回调*/ @Override protected void onResume() { super.onResume(); /*当宿主处于继续状态时,StateRecord变更状态为 RunState */ stateRecord.setRunState(); } @Override protected void onPause() { super.onPause(); /*当宿主处于暂停状态时,StateRecord变更状态为 StopState */ stateRecord.setStopState(); } @Override protected void onDestroy() { super.onDestroy(); /*当宿主处于暂停状态时,StateRecord变更状态为 DestoryState */ stateRecord.setDestroyState(); }}
state.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:id="@+id/state_tv"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Click" android:id="@+id/state_btn"/></LinearLayout>
执行效果:
其他
使用此框架大大减少了类与类之间密切的耦合,提高了代码的可阅读性和明确性。有什么需要改进的地方还请多多指教,大家共同学习。如果您有更好的想法欢迎您踊跃参与其中,我会认真考虑您的建议,谢谢~~~
0 0
- Android跨线程通信状态框架Simple2Develop【更新至0.2.0】
- 线程状态-互斥锁-通信
- StateFramework——Android状态通知通信快速开发框架
- android线程间通信和主线程更新ui
- android跨线程通信eventbus
- 线程的状态及通信
- android wifi状态更新
- Android待机状态更新
- [Android通信]版本更新
- android线程状态
- android 线程的状态
- Android 线程通信
- 转载: Android 线程通信
- android线程间通信
- Android线程间通信
- Android 线程通信
- Android线程通信
- Android 线程通信
- 安装debugserver到iPhone上
- 【BZOJ1415】【codevs1784】聪聪与可可,概率DP
- VS2010/MFC编程入门之三十(常用控件:树形控件Tree Control 上)
- 【10】Java集合:基本体系概述
- NFC三种模式NDEF,TECH,TAG 解析顺序
- Android跨线程通信状态框架Simple2Develop【更新至0.2.0】
- 技巧67 在连续的文本行上重复修改
- TV 颜色空间YUV
- 如何理解Nginx, WSGI, Flask之间的关系
- 右键菜单动态菜单的创建 第六课第三部分
- VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)
- qt动画框架(三) 自定义tab滑动导航栏
- 【栈】POJ1363-Rails
- VS2010/MFC编程入门之三十二(常用控件:标签控件Tab Control 上)