首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android  JetPack~ LiveData (一)   介绍与使用

一般情况下LiveData都是搭配这ViewModel使用,这里先介绍一下LiveData,再结合ViewModel使用 Android数据绑定技术一,企业级开发 Android数据绑定技术二,企业级开发...的使用 5、MutableLiveData使用 6、LiveDataMutableLiveData的可变与不可变 7、其他方法 1、什么是LiveData LiveData是一个观察者模式的数据实体类...下面代码讲解 抽象类,无法直接new 2、什么是MutableLiveData MutableLiveData的父类是LiveData 用法和LiveData类似,也是注册观察者回调里查看更新数据 可变...,setValue和postValue支持外部使用(public修饰) 普通类,可以直接new 3、LiveDataMutableLiveData区别 LiveData实体类里可以通知指定某个字段的数据更新...和MutableLiveData的可变与不可变 其实就是setValue和postValue是否暴露问题,LiveData是不支持外部使用MutableLiveData特意放开 @SuppressWarnings

1.5K20

什么代码要求我们使用LocalDateTime不是Date?

作者:何甜甜在吗 来源:http://1t.click/a7Gm 项目开发过程中经常遇到时间处理,但是你真的用对了吗,理解阿里巴巴开发手册禁用static修饰SimpleDateFormat...多并发情况下使用SimpleDateFormat需格外注意 SimpleDateFormat除了format是线程不安全以外,parse方法也是线程不安全的。...calb属性设置cal c、返回设置好的cal对象 但是这三步不是原子操作 多线程并发如何保证线程安全 - 避免线程之间共享一个SimpleDateFormat对象,每个线程使用时都创建一次SimpleDateFormat...=> 较好的方法 1.Date对时间处理比较麻烦,比如想获取某年、某月、某星期,以及n天以后的时间,如果用Date来处理的话真是太难了,你可能会说Date类不是有getYear、getMonth这些方法吗...•MySQL使用规范手册,程序员必知必会•Redis是如何实现点赞、取消点赞的?•万亿条数据查询如何做到毫秒级响应?•数据库分库分表思路•优秀的Java程序员必须了解的GC哪些想知道更多?

1.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

Android技术栈(四)Android Jetpack MVVM 完全实践

MVVMView不是数据的实际持有者,它只负责数据如何呈现以及点击事件的传递,不做的数据处理工作,数据的处理者和持有者变成ViewModel,它通过接收View层传递过来的时间改变自身状态,发出事件或者改变自己持有的数据触发...xml数据最好是不可变的,所以上面的字段使用了final,但这不是必须的,根据你自己的需求来进行定制 2.3.7 绑定并非立即发生 这里有一点值得注意的是,你给ViewDataBinding的赋值并不是马上生效的...android:id,然后Activity/Fragment解决,但有时候我们想直接在xml配置,以消除一些样板代码,这时候就需要自定义正向绑定. 2.4.1 自定义正向绑定适配器 我们可以使用@...,反向绑定就是View值的变化和也能反应给我们. 2.5.1 使用双向绑定 所有使用之前所有使用@{}包裹的都是正向绑定,双向绑定是@={},并且只支持变量,字段,Setter(比如User#setName...4 LiveData LiveData是对Android组件生命周期感知的粘性事件,也就是说,LiveData持有数据时,你去订阅它就能收到他最后一次接收到的数据.实战,我们能用到的LiveData

3.8K01

Android Jetpack架构组件(四)之LiveData

观察者绑定到 Lifecycle 对象并在其相关生命周期 destroyed 后自行解除绑定。 不会因为 Activity 停止发生奔溃。...二、 LiveData与ViewModel的关系 Jetpack架构,ViewModel的主要作用是存储各种数据,当然,我们也可以ViewModel处理一些数据逻辑。...例如,我们可以ViewModel对加载的数据进行某些加工操作。...LiveData的作用就是包装ViewModel数据,并让被观察者能够观察数据的变化。下图是官方Jetpack架构的示意图。...从上述步骤可以看出,LiveData使用了观察者模式,观察者通常是UI控制器,如Activity或Fragment,被观察者则是LiveData包谷的数据对象, 当LiveData对象持有数据发生变化

2.7K00

Jetpack之LiveData详解

简介 LiveData 是Jetpack的一个组件,是一个可被观察的数据存储器类, 具有感知组件生命周期的能力,LiveData 可以感知组件生命周期活跃状态发送数据更新,组件销毁时移除观察者对象,...LiveData 结合 ViewModel 使用 前面介绍 LiveData使用时都是直接在Activity里使用的,但是真实开发场景我们一般不直接在 Activity / Fragment 中使用而是...ViewModel 中使用,然后 Activity / Fragment 中观察 ViewModel 里 LiveData 数据的变化: java: public class MainViewModel...DataBinding 的 Observable 而是使用LiveData ,在数据绑定的时候给 ViewDataBinding 设置了 LifecycleOwner 即 binding.setLifecycleOwner...(this) ,当数据绑定时 ViewDataBinding 内部会自动给绑定LiveData 对象添加观察者对象观察数据的更新从而刷新 UI 数据

1.6K20

AAC---LiveData

而这种相关性(awareness )会导致LiveData数据只有Active状态下才会被回调。 我们可以通过实现了LifeCycleOwner接口的对象来提供生命周期的感知。...合理的Configuration改变 旋转时候,它会立马接收到最新的可用数据不会因为重新创建Activity重新创建 共享资源 可以通过继承一个LiveData对象,并且使用单例模式来封装一个系统的...LiveData对象一旦连接系统Service,当有Observer需要资源的话,就可以监听LiveData对象了 使用方法 build.gradle添加配置 dependencies {...数据有变化时候,则可以调用setValue或者非主线程调用postValue改变,修改后的值会通过onChanged方法回调。...返回的对象可以是一个LiveData数据数据有改变时,该LiveData也会收到最新的数据 ViewModel: ViewModel的作用也就是请求数据,或者做一些前台耗时操作,当数据返回或者操作完成后

1.1K20

【Jetpack】ViewModel + LiveData + DataBinding 综合使用 ( 核心要点说明 | 组合方式 | 代码示例 )

DataBinding 结合使用时 , DataBinding 布局设置的就是该 视图模型 类对象 ; 该 ViewModel 类 , 还 使用LiveData , 可以实时监听数据改变...ViewModel 数据发生了变化 , 如何将变化应用到视图组件 , 视图中显示最新的数据内容 , 此时就用到了 LiveData 组件 ; ViewModel 的基础上 , 通过 引入 LiveData..., 可以将 运行过程 ViewModel 的 Model 模型数据改变 通知 视图 View , 令视图组件显示最新的数据内容 ; ViewModel 中使用LiveData 后 , 必须调用...androidx.lifecycle.Observer#onChanged 函数 , 该回调函数执行 更新视图 操作 ; LiveData 使用核心要点 : 首先 , 自定义 ViewModel...实现 , 用于 运行过程 , 一旦 ViewModel 数据发生改变 , 就 通知 View 视图组件 , 更新数据显示 ; LiveData 生效需要 为 MutableLiveData 设置

1.3K20

DataBinding系列之基础使用

Windows 请按快捷键 Alt + 回车 Mac 请按快捷键 option + 回车 ---- 3.DataBinding绑定 3.1 数据类型 通常我们DataBinding绑定数据类型是...ViewModelProvider(this).get(Xxx::class.java) 而在ViewModel,通常使用MutableLiveData作为可变UI响应数据类型。...) } 当然了,如果你有一个LiveData会随着一个或多个LiveData的变化变化,这个时候你可能就需要使用MediatorLiveData,即合并LiveData。...一般来说框架中使用到泛型未知ViewDataBinding具体类型的时候,都会使用第二种方式进行绑定,可以说第二种方式更通用一些。...例如,include定义的变量id是:, 那么就使用 app:user="@{state.user}" 来绑定数据,与variable定义的name保持一致。

27130

感受LiveData与ViewModel结合之美

2.优势 LiveData 是一个可以感知 Activity 、Fragment生命周期的数据容器。当 LiveData 所持有的数据改变时,它会通知相应的界面代码进行更新。...直到关联的 Activity 或 Fragment 完全销毁时,ViewModel 才会随之消失,也就是说,即使旋转屏幕导致 Fragment 被重新创建等事件,视图数据依旧会被保留。...那么LiveData与ViewModel的组合使用可以说是双剑合璧,Lifecycles贯穿其中。...首先创建一个类,使用@LiveData注解标记你要保存的数据。注意这里的参数名称,下面会用到。...setXXX()要在主线程调用,postXXX()既可在主线程也可在子线程调用。一般情况下可以直接使用。比如上面的Fragment例子。

84820

MVVM 进阶版:MVI 架构了解一下~

不过软件开发没有银弹,MVVM架构也不是尽善尽美的,使用过程也会有一些不太方便之处,MVI可以很好的解决一部分MVVM的痛点。...,这其实是单一数据不是双向数据绑定,所以其实MVVM的这一大特性我其实并没有用到 View通过调用ViewModel提供的方法来与ViewMdoel交互 小结 MVC架构的主要问题在于Activity...MVVM的双向数据绑定主要通过DataBinding实现,但有很多人(比如我)不喜欢用DataBinding,而是View通过LiveData等观察ViewModle的数据变化并自我更新,这其实是单一数据不是双向数据绑定...其次就是View层通过调用ViewModel层的方法来交互的,View层与ViewModel的交互比较分散,不成体系 小结一下,我的使用,MVVM架构主要有以下不足 为保证对外暴露的LiveData...MVI的View通过订阅Model的变化实现界面刷新 Intent: 此Intent不是Activity的Intent,用户的任何操作都被包装成Intent后发送给Model层进行数据请求 单向数据

1.9K20

Android从零开始搭建MVVM架构(4)——LiveData

当你更新LiveData对象存储的数据时,所有注册了的Observer,只要所绑定的LifecycleOwner处于活动状态,就会被触发通知。...确保ViewModel不是Activity或Fragment中保存用来更新UI的LiveData对象,原因如下: 避免臃肿的Activity和Fragment。...这些UI控制器负责显示数据不是保存数据状态。 将LiveData实例与特定Activity或Fragment实例分离,这将使得LiveData对象配置更改后仍然存活。...MutableLiveData类暴露公用的setValue(T)和postValue(T)方法,如果需要编辑存储LiveData对象的值,必须使用这两个方法。...另外,如果UI组件被重新创建,它会触发对repository.getPostCode()方法的另一个调用,不是使用前一个调用的结果。

2.2K30

Jetpack源码解析—LiveData使用及工作原理

不会因停止Activity发生崩溃 如果Observer的生命周期处于非活跃状态,例如在后退堆栈的Activity,就不会收到任何LiveData事件的通知。...Demo通过对一个LiveData对象进行生命周期的监听,实现将值打印控制台中。...关于postValue()子线程更新数据的相关代码,这里就不做介绍了,其实你大可以想出来,就是使用的Handler。...LiveData的代码很简洁,400多行的代码,看起来也并不费劲,下面我们来分析下整个流程: 通过使用LiveData对象,为它创建观察者Observer 创建Observer时绑定Fragment生命周期...类,可以帮助我们实现这样的场景: 通过**Transformations.map()**使用一个函数来转换存储 LiveData对象的值,并向下传递转换后的值: LiveDataViewModel

99520

Android  JetPack~ ViewModel (一)   介绍与使用

设备信息发生变更数据不会丢失(切横竖屏),其实它只有一个生命周期,检测页面销毁时触发 ViewModel 的另一个特点就是同一个 Activity 的 Fragment 之间可以使用ViewModel实现共享数据...void onCleared() { super.onCleared(); } } onCleared方法是ViewModel独有的,当Activity真正退出后,它会调用,不是销毁后调用...网络请求时,突然销毁activity,那么与之绑定的viewmodel也会销毁,同时我们onCleared()方法取消网络连接接口(call.cancel()),就算是有数据返回,activity也不会收到通知...,因为数据是从livedata监听的,只有livedata触发了更新,Activity才会收到通知。...create是创建一个新的实例,get是先从HashMap找,找不到就创建新的实例。

54340

为什么 build 方法放在 State 不是 StatefulWidget

老孟导读:此篇文章是生命周期相关文章的番外篇,查看源码的过程中发现了这一有趣的问题,欢迎大家一起探讨。...为什么 build 方法放在 State 不是 StatefulWidget 呢?其中前2点是源代码的注释给出的原因,最后一点是我的一点个人理解。...闭包 this 指向异常 假设 build 方法 StatefulWidget ,StatefulWidget 的子类写法如下: class MyWidget extends StatefulWidget...如果 build 方法 State ,代码如下: class MyWidget extends StatefulWidget { final Color color; const MyWidget...性能 有状态的组件包含StatefulWidget 和 State,当有状态组件的配置发生更改时,StatefulWidget 将会被丢弃并重建, State 不会重建,框架会更新 State 对象

87920

“终于懂了“系列:Jetpack AAC完整解析(二)LiveData 完全掌握!

1.2 特点 使用 LiveData 具有以下优势: 确保界面符合数据状态,当生命周期状态变化时,LiveData通知Observer,可以observer更新界面。...观察者可以在生命周期状态更改时刷新界面,不是每次数据变化时刷新界面。 不会发生内存泄漏,observer会在LifecycleOwner状态变为DESTROYED后自动remove。...实例mLiveData的创建是使用MutableLiveData,它是LiveData的实现类,且指定了源数据的类型为String。...: 与存储本地数据数据关联的 liveData5 与从网络访问的数据关联的 liveData6Activity 只需观察 MediatorLiveData 对象即可从这两个源接收更新。...这里为啥使用observeForever方法呢,这是因为源LiveData在外部使用时不会调用observer方法添加观察者,这里永远观察是为了LiveData数据变化时及时回调到 mObserver.onChanged

3.9K30

“终于懂了“系列:Jetpack AAC完整解析(四)MVVM - Android架构探索!

逻辑层:为了实现系统功能进行的必要逻辑。 数据层:数据的获取和存储,含本地、server。 正常的开发流程,开始写代码之前 都会有架构设计这一过程。这就需要你选择使用何种架构模式了。...但在Android,因为xml布局能力很弱,View的很多操作是Activity/Fragment的,业务逻辑同样也是写在Activity/Fragment。 ?...View 产生事件,使用 ViewModel进行逻辑处理后,通知Model更新数据,Model把更新的数据给ViewModel,ViewModel自动通知View更新界面,不是主动调用View的方法。...本地数据源可以使用数据库、SharedPreferences等持久化技术来实现,网络数据源则通常使用Retrofit访问服务器提供的Webservice接口来实现。...另外,注意到暴露的获取LiveData的方法 返回的是LiveData类型,即不可变的,不是MutableLiveData,好处是避免数据在外部被更改。

1.9K10

LiveData 还有学习的必要吗?—— Jetpack 系列(2)

1.2 LiveData使用方法 1、添加依赖: build.gradle 添加 LiveData 依赖,需要注意区分过时的方式: // 过时方式(lifecycle-extensions 不再维护...#obChanged())的过程重新设置新数据,此时会中断旧数据的分发,部分观察者将无法接收到旧数据; 情况 3:观察者绑定的生命周期处于非活跃状态时,连续使用 setValue() / postValue...2.5 LiveData 数据重放原因分析 LiveData数据重放问题也叫作数据倒灌、粘性事件,核心源码 LiveData#considerNotify(Observer) : 首先,LiveData...LiveData 重放问题需要区分场景来看 —— 状态适合重放,事件不适合重放: 当 LiveData 作为一个状态使用时,注册新观察者时重放已有状态是合理的; 当 LiveData 作为一个事件使用时...源码的 Observer#mLastVersion 和 LiveData#mVersion 子类重新实现一遍。

3.5K10
领券