写点什么

Android jetpack 最佳总结和实践,安卓面试题宝典 app

用户头像
Android架构
关注
发布于: 刚刚

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 中恢复原有状态。比如: 在恢复窗口时,我们可以不使用 onRestoreInstanceState,而代替的是 getLastNonConfigurationInstance 方法。

2.3 LiveData

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

  2. 实现原理


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


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


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


Observer 也不会被通知。


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

2.4 WorkManager

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

  2. 实现原理 架构图:


2.5 Navigation

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

  2. 实现原理 类图:


2.6 Paging&Room

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

  2. 实现原理 原理图:




示例




基于 Jetpack 的架构图总结:



架构图:


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


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


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


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


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


大致意识:


仓库模块负责处理数据操作,提供了一个干净的 API 使得获取数据更加容易。仓库层知道从何处获取数据以及更新数据时要调用的 API。你可以认为仓库层是作为中介在不通过的数据源之间,比如持久模型,Web 服务,缓存等。


总结:遵循关注点分离原则 经过 Repository 中介层使得 ViewModel 不需要具体的数据来源,这样就可以根据需求将其交换为其他实现。


如果你想学习 jetpack 但是又缺少总结性的学习资料,我正好薅到这本阿里十年技术专家联合打造“最新”《Jetpack 强化实战手册》,是你学习 Jetpack 的葵花宝典。下面正文开始:


一、初识 ConstraintLayout 之实现登录页面




1.创建项目


2.沉浸式的布局


3.富文本


4.属性动画



二、Navigation 实践之实现 APP 主框架以及 Navigation 的相关介绍




1.搭建 Bottom Navigation Activity


2.导航界面跳转


3.Navigation 传值


4.Navigation 跳转动画


5.导航文件拆分


6.Deeplink 导航



三、使用 Coroutines, Retrofit, Moshi 实现网络数据请求




1.kotlin - Coroutine 协程


2.用协程和 Retrofit 实现网络请求



四、使用 TabLayout,ViewPager2 ,RecyclerView 实现实现歌单广场页面




1.ViewPager2


2.TabLayout


3.RecyclerView


4.网络数据请求和数据填充


5.优化界面



五、歌单页面 MVVM 架构改造及其 ViewModel 和 LiveData 的使用介绍




1.MVC 和 MVVM 介绍


2.修改歌单页面



六、Paging 实现加载更多和下拉刷新,错误后重新请求




1.Paging 的优势


2.Paging 实现分页加载更多


3.Paging 和 SwipRefreshLayout 组合实现下拉刷新


4.给 RecyclerView 添加加载状态的 Footer


5.发生网络错误后重试


6.帧动画



七、vlayout 嵌套横向 RecyclerView 和 Banner 实现主页的展示,自定义 Moshi 的 JsonAdapter




1.vlayout 架构分析


2.vlayout 布局介绍


3.基础工作准备


4.vlayout 实现轮播图


5.字段内容类型不一致



八、Room 数据库实现增删改查和事务处理




1.添加 Room 依赖


2.Room 详细介绍


3.DataBase 创建时插入数据

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android jetpack最佳总结和实践,安卓面试题宝典app