2)类图
-
Lifecycle组件成员Lifecycle被定义成了抽象类,LifecycleOwner、LifecycleObserver被定义成了接口。
-
组件(Activity、Fragment)实现了LifecycleOwner接口,该只有一个返回Lifecycle对象的方getLifecyle(): LifecycleRegistry。
-
Lifecycle的内部类State标明状态、Event表示事件
-
ObserverWithState的成员变量GenericLifecycleObserver继承自LifecycleObserver
2.2 ViewModel
-
一句话概述: ViewModel存储和管理 UI 相关数据,保证组件(Activity)重新创建时可以恢复历史数据。
-
生命周期转化图:
- 实现原理
(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级别和应用程序状态等因素选择适当的方式来运行任务。
-
实现原理 架构图:
2.5 Navigation
-
一句话概述: Navigation管理APP页面跳转。Navigation大部分部分情况下作用于Fragment中,使用Navigation切换Fragment可以使代码简洁,直观。Navigation导航组件还支持:Fragment、Activity、导航图和子图、自定义目标等。。
-
实现原理 类图:
2.6 Paging&Room
-
一句话概述: Paging主要是用来结合RecyclerView进行使用,是一种分页加载解决方案,这样Paging每次只会加载总数据的一部分。 Room是Google提供的一个ORM库。。
-
实现原理 原理图:
基于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的葵花宝典。下面正文开始:
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.修改歌单页面
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.字段内容类型不一致
1.添加Room依赖
2.Room详细介绍
3.DataBase创建时插入数据
4.Room实现歌单标签编辑界面的增删改查
1.新建 Entity
2.新建 Dao
3.修改 Database
4.修改 HomeViewModel
5.Migration
1.ExoPlayer介绍
2.ExoPlayer简单的使用方法
3.ExoPlayer简单自定义
4.ExoPlayer高级自定义
5.ExoPlayer在RecyclerView中的复用
1.MotionLayout基础
2.关键帧 Keyframes
3.代码启动动画和监听动画
4.MotionLayout案例分析
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
![](https://i-blog.csdnimg.cn/blog_migrate/40ad892cc268d31d67f8f1c91b494df6.jpeg)
总结:
各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。
-
BAT大厂面试题、独家面试工具包,
-
资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter,
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
img2.imgtp.com/2024/03/13/H4lCoPEF.jpg" />
总结:
各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。
-
BAT大厂面试题、独家面试工具包,
-
资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter,
[外链图片转存中…(img-IiwyFKhJ-1712141475872)]
[外链图片转存中…(img-OFKmb8Tc-1712141475873)]