Android jetpack最佳总结和实践,字节跳动技术整理

Android jetpack最佳总结和实践,字节跳动技术整理

实现原理

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

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

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

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

Android jetpack最佳总结和实践,字节跳动技术整理

2)类图

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

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

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

ObserverWithState的成员变量GenericLifecycleObserver继承自LifecycleObserver

Android jetpack最佳总结和实践,字节跳动技术整理

[](

)2.2 ViewModel

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

生命周期转化图:

Android jetpack最佳总结和实践,字节跳动技术整理

实现原理

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

(2)通过getLastNonConfigurationInstance()在新的Activity Instance中恢复原有状态。比如: 在恢复窗口时,我们可以不使用onRestoreInstanceState,而代替的是 getLastNonConfigurationInstance 方法。

[](

)2.3 LiveData

一句话概述: LiveData 是保存数据对象的类,通过注册监听器Observer 监听数据的变化。LiveData最大的优势:LiveData 是感知Activity、Fragment等生命周期的组件。

实现原理

(1)使用LifecycleOwner的observe() 方法将观察者对象附加到LiveData对象,将观察者向LiveData对象订阅,以便通知LiveData中数据的变化。

(2)当Lifecycle 没有处于活动状态( (STARTED 、RESUMED)),Observer 则不会被通知,即使数据发生了变化,没有处于活动状态的 Observer 也不会被通知。

(3)Lifecycle 被销毁(destroyed)Observer 也自动被删除,无需用户手动清理。 避免内存泄漏:Observer 和 Lifecycle 绑定,可以感知组件生命周期,所以当 Lifecycle 被销毁后,Observer 自动被remove避免内粗泄漏。

[](

)2.4 WorkManager

一句话概述: WorkManager 负责用来管理后台任务,它适用于需要保证系统即使应用程序退出也会运行的任务, WorkManager会根据设备API级别和应用程序状态等因素选择适当的方式来运行任务。

实现原理 架构图:

Android jetpack最佳总结和实践,字节跳动技术整理

[](

)2.5 Navigation

一句话概述: Navigation管理APP页面跳转。Navigation大部分部分情况下作用于Fragment中,使用Navigation切换Fragment可以使代码简洁,直观。Navigation导航组件还支持:Fragment、Activity、导航图和子图、自定义目标等。。

实现原理 类图:

Android jetpack最佳总结和实践,字节跳动技术整理

[](

)2.6 Paging&Room

一句话概述: Paging主要是用来结合RecyclerView进行使用,是一种分页加载解决方案,这样Paging每次只会加载总数据的一部分。 Room是Google提供的一个ORM库。。

实现原理 原理图:

Android jetpack最佳总结和实践,字节跳动技术整理

Android jetpack最佳总结和实践,字节跳动技术整理

[](

)示例

基于Jetpack的架构图总结:

Android jetpack最佳总结和实践,字节跳动技术整理

架构图:

(1)View层:表示的Activity和Fragment等组件。

(2)ViewModel层:ViewModel存储和View层相关的数据,可以在View层重新绘制时恢复数据,而且负责和View层和仓库层之间的通信。

(3)仓库层:负责从数据库中获取数据或者从网络中获取数据,并将数据返回给ViewModel层。

(4)数据层:数据层分为网络数据层(Retrofit)和是数据库数据层(GreenDao)。

(5)View层和ViewModel层通过LiveData通信,避免了接口的内存泄漏问题。 关于仓库层存在必要性?:

大致意识:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwyfzw.html