Android jetpack最佳总结和实践,android面试及答案

(1)在MVP架构中,Presenter中持有View层的引用,如果生命周期处理不当,会存在内存泄露的风险。在MVVM架构中View层和VM层通过LiveData通信,避免了内存泄漏。。

(2)传统MVP架构由于各层之间的通信是通过接口,所以会导致接口数量惊人,上诉架构通过观察者模式(LiveData)避免了接口问题。

如果在上诉架构中加入Databidning。实现View和Model的双向绑定接可以演变成MVVM架构。但是基于DataBinding的MVVM架构有如下缺点:

(1)数据双向绑定,导致View不可重用。

(2)通过DataBinding实现数据绑定,会增加Bug调试难度。

(3)业务的复杂,会带来View页面复杂,model层代码也会增大。

jetpack架构


2.1 Lifecycles

  1. 一句话概述: Lifecycles是一个持有组件生命周期状态(Activity、Fragment)信息的类,用来解决生命周期管理问题的组件。

  2. 生命周期转化图:

  1. 实现原理

(1)数据结构: 为什么使用该数据结构? 具有如下优点:

1.SafeIterableMap 的插入操作是时间复杂度O(1)直接通过指针的移动插入数据,而且不需要执行hash算法,效率高。

2.遍历的过程中删除元素而不触发ConcurrentModifiedException。

3.使用双向链表来存储会比 HashMap (java 8 红黑树)节省内存空间。

2)类图

  1. Lifecycle组件成员Lifecycle被定义成了抽象类,LifecycleOwner、LifecycleObserver被定义成了接口。

  2. 组件(Activity、Fragment)实现了LifecycleOwner接口,该只有一个返回Lifecycle对象的方getLifecyle(): LifecycleRegistry。

  3. Lifecycle的内部类State标明状态、Event表示事件

  4. ObserverWithState的成员变量GenericLifecycleObserver继承自LifecycleObserver

2.2 ViewModel

  1. 一句话概述: ViewModel存储和管理 UI 相关数据,保证组件(Activity)重新创建时可以恢复历史数据。

  2. 生命周期转化图:

  1. 实现原理

(1)onRetainNonConfigurationInstance方法。 当发生屏幕切换时,将伴随Destroying被系统调用。通过这个方法可以像onSaveInstanceState()的方法一样保留变化前的Activity数据和状态,最大的不同在于这个方法可以返回一个包含有状态信息的Object对象,其中甚至可以包含Activity Instance本身。用这个方法保存Activity State后。

(2)通过getLastNonConfigurationInstance()在新的Activity Instance中恢复

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值