databinding、room。。。

 

加载xml标签会解析生成2份  

app/intermediates/data_binding_layout_info_type_merge/out
命名规则(原命名-layout.xml)

主要通过包名位置、tag(对应第二个xml的位置)、expression(来确定绑定的位置)。及以后apt的生成。originalTag是你原来的设置的tag

app/intermediates/incremental/mergeDebugResources/stripped.dir/layout
命名规则 -原命名

会在现有的xml 自动添加tag属性,进行与上个文档的绑定。

 生成的apt文件目录app/build/generated/ap_generated_sources/out(java) kotlin在此目录上级目录下,自己找。

 会通过apt自动生成的BR.xx 去查找数组的位置,数组中之前已经设置监听器(weakPropertyListener->
onPropertyChanged),通过监听器调用apt生成的xxximp.javahandle去更新ui

databinding 必须是19以上包含 才能使用。默认绑定会在ViewDataBinding 上面有个static{}语句块初始化。

问题的规整

布局控件都会放到一个数组对象中,那么这个数组对象大小是不定的,如果你有多个activity就会存在多个数组对象,这是比较占用内存的。

所有的model更新都是通过handler通知view进行更新的,handler内部拥有一个Looper对象,是不断的在执行消息循环。每一个activity都会存在一个handler,这样也会导致内存的大量消耗。

针对每一个控件都添加了一个监听mboundView1androidTextAttrChanged,mboundView2androidTextAttrChanged。针对第一个监听,进入监听回调方法。针对每一个控件都会存在一个回调对象,针对多个activity,也会导致内存的大量消耗

四、总结
1、dataBinding只是一种工具,和MVVM(设计思想)是完全没有关系的,MVC、MVP同样可以使用dataBinding。

2、使用dataBinding会导致大量的内存消耗,具体在3个地方会导致该情况发生。

(1)会产生多余的数组,存放view对象

(2)存在大量handler,looper不断的循环消息

(3)针对每一个控件都会产生一个回调对象

3、dataBinding使用APT技术,编译期间生成控件与model的绑定代码。所以会产生很多类,随着布局文件的增加,编译会越来越慢。

参考地址:https://blog.csdn.net/qinbin2015/article/details/93916842

room介绍

https://blog.csdn.net/u012735483/article/details/78737622

自己感觉的
优点:可以跟JetPack全家桶一起使用,比如数据生命周期的管理
缺点:代码有些繁琐,比如新建数据库都需要去做映射entities = {Student.class}。一些单字段查询,关联查询需要重新创建实体类做相关的映射。

ViewModel 的作用

以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。在对应的作用域内,保正只生产出对应的唯一实例,保证UI组件间的通信。

Livedata的作用

LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。

Navigation

1、App需要有确定的起始点
2、使用一个栈来代表App的导航状态
3、向上按钮从不会退出你的App
4、在App任务中向上和返回按钮是等价的
5、深度链接到目标或导航到相同的目标应产生相同的堆栈

总体navigation的出现,就是为了尽量替换activity。减少asm的通讯,加快响应速度及跨进程通讯。参考

paging

优点:
自带分页,预加载处理
子线程diff,主线程局部刷新
可以和Room无缝结合
能设置距离最后还有多少个item时,开始加载下一页的数据

缺点:
使用复杂,有待封装

参考地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值