【安卓进阶】LiveData
最近参与到后端的工作中,虽然以前在工作中使用过PHP,但是这次使用的是Java,开发思路和方式有所不同。后端开发中,做接口也是需要处理大量的业务逻辑关系,同时一些事务之类的技术因素也要考虑好,在架设项目的时候就已经考虑好手动控制事务,Dao与Service层的方法都有Connection对象传入,用作事务控制。数据库连接池也是很重要,不然每次重新获取数据库连接对象也是一个耗时操作,数据库连接池使用c3p0。
LiveData简介
LiveData是Jetpack的Architecture部分的一个类,它是一个数据容器。简单来说,他是一个泛型类,能在内部持有一个泛型类型对象的实例,可以对其添加监听器,当我们调用更新数据的方法,所有的监听器都能收到回调。
听起来好像没什么特点,但是先来看看LiveData的最优秀的两个特性。
1. 添加的监听器自动绑定生命周期,当Activity、Fargment的生命周期结束的时候,LiveData对象自动销毁监听器。
2.当绑定的生命周期进入暂停的时候,监听器不会收到回调,当生命周期重新进入的时候,监听器会再次收到回调。
MutableLiveData
MutableLiveData是实现了LiveData抽象类的类,其实并没有增加任何功能。
public class MutableLiveData<T> extends LiveData<T> {
@Override
public void postValue(T value) {
super.postValue(value);
}
@Override
public void setValue(T value) {
super.setValue(value);
}
}
添加监听器
添加监听器目的就是为了随时获取最新值变化的回调,下面看看代码示例。
MutableLiveData<String> liveData = new MutableLiveData<>();
liveData.observe(mFragment, new Observer<String>() {
@Override
public void onChanged(@Nullable String o) {
Log.e("LiveData:", o);
}
});
LiveData.observe(@NonNull LifecycleOwner owner, @NonNull Observer<T> observer)方法需要LifecycleOwner是接口实例参数,Fragment、Activity已经实现此接口。
更新数据
当我们添加了监听器,任何时候我们可以更新LiveData里面的数据,其他监听器就会收到回调。
// 在主线程中使用 void setValue (T value) // 在工作线程中使用 void postValue (T value)
【安卓进阶】LiveData的更多相关文章
- 安卓进阶之自定义View
目录 安卓进阶之自定义View 自定义View的工作流程和内容 工作流程 测量阶段和布局阶段的工作内容 View 和 ViewGroup 在测量阶段和布局阶段的区别 绘制阶段的工作内容 上手:实现继承 ...
- 【安卓进阶】Product Flavor基础玩法
在安卓项目开发中,大多时候总是有测试环境.生产环境之类的区别,在不使用Product Flavor时,我们一般都是通过手工改动代码来实现测试环境.生产环境的切换. 这样就造成了项目管理上的不便,频繁的 ...
- 【安卓进阶】Scroller理解与应用
项目中有个需求,就是在RecyclerView的item中进行侧滑,一开始同事推荐了一个开源库,使用起来确实也方便好用,直接在布局作为父布局即可实现侧滑. 自己也非常好奇这个开源库到底用了什么API能 ...
- 安卓中的消息循环机制Handler及Looper详解
我们知道安卓中的UI线程不是线程安全的,我们不能在UI线程中进行耗时操作,通常我们的做法是开启一个子线程在子线程中处理耗时操作,但是安卓规定不允许在子线程中进行UI的更新操作,通常我们会通过Handl ...
- 工作不久的安卓开发者,他们是这样规划自己的Android学习路线
Android开发工作者工作不久的时候,会有一段迷茫期,觉得自己应该再学一点,却不知道从何学起,该怎样规划自己的学习路线呢?今天,我给大家梳理一下Android基础,就像建造房屋一样,要建造一座宏伟的 ...
- [安卓基础] 001.学习Android开发的好教程
如果想自学android,有许多不错的android网站.这里收集了一些,列举如下: 国内 极客学院,这里有非常丰富的视频教程. http://www.jikexueyuan.com/course/a ...
- 《疯狂java讲义》读后感
<疯狂java讲义·第三版>,全书共851页,18章. 目录如下: 第1章 Java语言概述与开发环境 第2章 理解面向对象 第3章 数据类型和运算符 第4章 流程控制与数组 第5章 面向 ...
- 【转】Android 将自己的应用改为系统应用
所谓系统程序就是system/app目录中的程序,普通应用转换成系统程序后有稳定.减少内存(DATA)空间占用.恢复出厂设置后不会消失.修改系统时间.调用隐藏方法.系统关机重启.静默安装升级卸载应用等 ...
- 篇4 安卓app自动化测试-Appium API进阶
篇4 安卓app自动化测试-Appium API进阶 --lamecho辣么丑 1.1概要 大家好! 我是lamecho(辣么丑),今天是<安卓app自动化测试& ...
随机推荐
- Request的方法和数组
req.getHeader("referer") [取得发送请求页面对应的浏览器地址栏信息,可以使用这种方法实现防盗链等操作] String name=new String(req ...
- Linux系统下的网络配置
一.修改配置文件,重启后设置不丢失 [Red Hat Linux/CentOS] 使用ifconfig查看使用的网口: [root@localhost /]# ifconfig 修改对应网口配置文件: ...
- spring boot集成redis实现session共享
1.pom文件依赖 <!--spring boot 与redis应用基本环境配置 --> <dependency> <groupId>org.springframe ...
- 个人常用的移动端浅灰底index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- C# Json解析Json = "{\"EX_RETURN\":[{\"MATNR\":\"test\"}] }";
string jtext = "{\"jiangsu\":[{\"wuxi\":\"无锡\"},{\"suzhou\&q ...
- 递归函数 Vue ElementUI
对树形菜单的递归操作,首先应该对树形菜单数据进行整理,优化成自己需要的类型 比如Vue + ElementUI的动态侧边栏数据 export function routerRoleToPretty ( ...
- 请求http页面的相关过程
http请求从TCP建立三次握手后进行,客户端按照规定的格式向服务器发送http请求,服务器在接收到这个请求之后,首先要对其进行解析,发掘出客户端所需要的相关资源,然后经过相应的业务逻辑处理,找到这个 ...
- JDK1.8 HashMap--treeifyBin()方法
/*树形化*/ final void treeifyBin(Node<K,V>[] tab, int hash) { int n, index; Node<K,V> e;// ...
- SQL 一列数据整合为一条数据
SQL 一列数据整合为一条数据: SELECT STUFF(( SELECT distinct ',' + 列名 FROM 表名 where [条件] FOR XML PATH('') ), 1 ...
- 游戏引擎——cocos2d-x
Cocos2d-x是一个开源的移动2D游戏框架,MIT许可证下发布的.这是一个C++ Cocos2d-iPhone项目的版本.Cocos2d-X发展的重点是围绕Cocos2d跨平台,Cocos2d-x ...