响应式编程越来越符合现在的数据为核心的开发思路。所以,在去年,响应式也越来越火,从RxJava到React(支持了响应式)。如今,为了满足更多开发者的需求,Google也推出了自己的响应式框架——Agera。

  我之前从来没有进行过相关的开发,Agera算是第一次接触响应式开发,虽说它是一种新的开发思路。但我更习惯于,从它解决了什么问题,开始说起。

  其实在Android开发中,大家常常会面对非UI线程更新UI的问题。这个问题在百度上解答已经非常多了。其根本就是使用Handler,传递消息。但是Handler这个类的使用,不那么美观,结构不好看,还容易内存泄露。因此,各种框架对其进行了封装。从原生框架中的AsyncTask到后面EventBus,到如今的Agera都是对Handler传递消息这件事,进行了各种封装,让它更加的优雅。由于刚接触这个框架,原理暂时无力细说。在此先记录一下它的用法。

  Agera其实就是个观察者模式。分为两部分,数据源和观察者。当然,一个类也可以同时拥有这两种身份。

  先看数据源的demo代码:

  

import com.google.android.agera.BaseObservable;/*** Created by longsiyang on 2016/4/20.*/
public class BaseBean extends BaseObservable  {private String content = "";public String getContent() {return content;}public void setContent(String content) {this.content = content;update();}public void update(){new Thread(new Runnable() {@Overridepublic void run() {content += " after other thread";dispatchUpdate();}}).start();}
}

  这个类继承了BaseObservable,成为了Agera的数据源。我自己为这个数据写了get、set、update方法。

  我们可以注意到,update方法代码,是在一个新线程中执行的。在执行完成后,会调用dispatchUpdate()。这个方法是从BaseObservable继承下来的,功能就是通知这个数据源的所有观察者,执行update()方法。

  我们点进去看源码会发现:

    void dispatchUpdate() {handler.obtainMessage(MSG_UPDATE, this).sendToTarget();}

  以上就是数据源相关的。

  

  接下来,我们看看如何成为观察者。本例中,让一个Activity成为观察者。

  

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;import com.google.android.agera.Updatable;public class MainActivity extends AppCompatActivity implements Updatable {BaseBean baseBean;EditText editText;TextView textView1 , textView2 , textView3;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView1 = (TextView) findViewById(R.id.test_tv_id1);textView2 = (TextView) findViewById(R.id.test_tv_id2);textView3 = (TextView) findViewById(R.id.test_tv_id3);baseBean = new BaseBean();editText = (EditText) findViewById(R.id.test_eidt_id);editText.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {if (baseBean != null){baseBean.setContent(s.toString());}}@Overridepublic void afterTextChanged(Editable s) {}});}@Overrideprotected void onResume() {super.onResume();baseBean.addUpdatable(this);}@Overrideprotected void onPause() {super.onPause();baseBean.removeUpdatable(this);}@Overridepublic void update() {textView1.setText(baseBean.getContent());textView2.setText(baseBean.getContent());textView3.setText(baseBean.getContent());}
}

  这个Activity中,我监听了Edittext的内容变化。

  在onResume中让观察者加入数据源,在onPause中让观察者移出数据源。并在Edittext内容变化时,改变数据源内容。改变内容时,由于调用了数据源的dispatchUpdate()方法,会使观察者调用update()方法。此时,Activity中的update()方法就会调用,更新textview1、textview2、textview3中的内容。

通过这些简洁的代码,我们就完成了一个结构优雅的,非UI线程更新UI。

Done~

转载于:https://www.cnblogs.com/fishbone-lsy/p/5413247.html

来自Google的响应式——Agera相关推荐

  1. 流体式布局与响应式布局_将固定像素设计转换为流体比例布局

    流体式布局与响应式布局 Responsive web design has been a prime necessity for every enterprise ever since Google ...

  2. 判断两个图片的特征向量_响应式布局提高篇 图片正确的打开方式

    作者 | Brilliant Open Web团队 编辑 | Aaron 本文承接上一章的内容,接着介绍响应式布局设计,主要讲如何实现响应式图片.通过对图片适配问题的说明,加深对响应式图片的理解,并分 ...

  3. 响应式网格项目动画布局_响应式网格及其实际使用方式:常见的UI布局

    响应式网格项目动画布局 重点 (Top highlight) 第二部分 (Part II) Now that you have a basic understanding of how to use ...

  4. 【网站开发必备】——12款响应式 Lightbox(灯箱)效果插件

    灯箱效果(Lightbox)是网站中最常用的效果之一,用于实现类似模态对话框的效果.网络上各种 Lightbox 插件琳琅满目,随着响应式设计(Respnsive Design)的发展,这一先进理念也 ...

  5. 移动设备响应式网站之CSS媒体查询

    http://www.ibm.com/developerworks/cn/web/wa-cssqueries/index.html 简介 现今每天都有更多的手机和平板电脑问市.消费者能够拥有可想象到的 ...

  6. 【技术干货】跨境茶话会第4期丨响应式编程的应用

    大师兄说 许多场景下为了更迅速的响应客户端的请求,将问题转化为实时反映业务状态的变化,能更好地提升用户体验以及支撑更大量的用户请求,于是催生了响应式编程,本期跨境茶话会仍旧邀请了中美两地的相关专家来谈 ...

  7. 响应式网页设计_响应式网页设计中的常用技术

    响应式网页设计 在先前的文章中,我讨论了为什么Web准备就绪以进行响应式设计 ,以及网站所有者如何使用用户设备和屏幕空间的上下文来跨各种尺寸的屏幕(包括PC,电话) 为用户提供上下文相关的体验.和控制 ...

  8. 分享29个超赞的响应式Web设计

    原文自:http://www.csdn.net/article/2013-01-16/2813678-responsive-design-websites 最近几年,响应式Web设计不断印入人们眼帘, ...

  9. js 幻灯片放映图片_20个响应式图像库和幻灯片放映(2018)

    如果您的网站上有大量图片,例如投资组合或摄影网站等,那么您最需要两件事–相册插件可帮助您更好地管理网站上的图片 ,而图片幻灯片则可以展示您的图片向世界展示图像. 但是,我今天的帖子将主要讨论响应式图像 ...

  10. 苹果cmsv10仿9080YY电影网站红色大气响应式免费模板

    模板主题介绍: 模板名称:苹果cmsv10仿9080YY电影网站红色大气响应式免费模板 模板程序:苹果cmsv10 模板类型:自适应模板 空间支持:php5.6+mysql 模板颜色:红色 模板来源: ...

最新文章

  1. 人工智能时代,怎样高效学习AI技术、聚焦AI行业趋势?
  2. u3d无锯齿遮罩shader-可用于ugui
  3. 当Tomcat遇上Netty,我这一系列神操作,同事看了拍手叫绝
  4. axios get传参_axios 传数组或对象格式的参数用GET和POST的区别
  5. 带你理解Spring AOP
  6. 记录一些我关注的人的博客
  7. 【opencv图像基础】图像常见的通道模式:RGB、YUV、HSV
  8. 利用if...else if....else循环语句编程
  9. Java面试个人简历
  10. 数据中心建筑设计及功能区布局的注意事项
  11. 【堆栈溢出】堆栈溢出
  12. Python读取excel文件数据并画柱状图
  13. XTUOJ-1281-Cute String
  14. 程序猿的创业故事:一个游走于计算机编程、高中数学、高中物理、爱好木工的全栈工程师,转行做高中教学的亲生经历!
  15. elasticsearch实现搜索拼音然后高亮内容
  16. h5 ios Safair下载文件自动添加.html导致文件乱码问题,ios不能使用接口播放视频的问题
  17. Kata3.0.0 x LifseaOS x 龙蜥内核三管齐下!带你体验最新的安全容器之旅
  18. 企业微信X微盛联合发布会回顾:All in企业微信赛道两年,微盛的增长逻辑
  19. 目前住院病人主要由护士护理,这样不仅需要大量护士,而且由于不能随时观察病人的病情变化,还可能会延误抢救时机。某医院打算开发一个以计算机为中心的监护系统,写出问题定义和分析系统可行性(软件工程导论)
  20. ffmpeg 截取一段视频命令

热门文章

  1. 地物编辑范例-通过SQL条件删除地物
  2. Redis源码分析——用剖析工具的方式来分析Redis的底层实现细节”
  3. java面向对象(一)
  4. vue密码框小眼睛以及密码校验
  5. python异常和超时处理_Python:超时异常处理信号。警报
  6. 简单的学生信息管理系统——C语言实现
  7. 【睡服】面试官的高质量自动化测试工程师简历--看完必有所获
  8. apple pencil性价比高吗?适用ipad的电容笔推荐
  9. PB级Elasticsearch集群中的最佳分片放置
  10. 《 产品设计思维:电商产品设计全攻略》一一3.5 首页的效益评估体系