IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Jetpack中各个组件简介 -> 正文阅读

[移动开发]Jetpack中各个组件简介


前言

Jetpack是当下最火的组件了,Google官方大力推荐,其好用,性能优异受到很多开发者的喜爱,接下来我们将简单了解一下Jetpack中各个组件,以后会发文章单独详细讲解


一、Lifecycle

lifecycle通过观察者模式监听生命周期

被观察者(lifecycleOwner):activity,Fragment声明周期变化getLifecycle().addObversever(自己的类)绑定观察者—>通知 dispatch(Event)—>观察者(lifecycleObserver):用户类,FrameWork层类,mObserverMap:存放了所有观察者—>反射拿到观察者的class对象—>mInfo:存放了所有带注解的方法@OnLifecycleEvent(Lifecycle.Event.ON_CREATE))—> mMethod.invoke(target,source)—>调用相应api,需要监听哪个声明周期则重写哪个方法就好

  • mState:从左往右,从右往左返回状态值
  • 监听生命周期需要实现lifecycleObserver接口

二、liveData

  • liveData是一个数据持有类

  • 能够感知组件的生命周期,确保仅更新活跃组件

  • 不会因Activity停止而导致崩溃,如果观察者的生命周期处于非活跃状态(如返回栈中的 Activity),则它不会接收任何 LiveData 事件

  • 持有的数据可被观察者观察,在底层数据更改时通知视图

  • 一对多观察者:观察者会绑定lifecycle对象,在生命周期结束时会自我清理(不会发生内存泄露)

  • 共享资源:可以使用单例模式扩展 LiveData 对象以封装系统服务,以便在应用中共享它们。

  • liveData使用:

    • MutableLiveData:LiveData(抽象类)的子类

    • liveData.postValue():可在任意线程下执行(切换线程操作)

    • liveData.setValue():只能在主线程中执行

    • liveData.observe():注册观察者

  • observe()源码:注册观察者保存在mObserves(map)中

    感知生命周期:owner.getLifecycle().addObserver(wapper),改变时调用onstatechanged()

    观察者有两种情况会被回调:

    1、postValue时会遍历观察者然后回调

    2、当组件生命周期发生变化或者第一次注册观察者时回调

  • 粘性事件:

    这里得满足两个条件会触发粘性事件
    1.数据发送早于注册监听
    2.监听者的owner生命周期进入活跃状态


三、ViewModel和DataBinding

  • viewModel:注重以生命周期的方式存储和管理界面相关数据,不受activity生命周期影响

    • 数据持久化:生命周期不受限制

    • 异步回调问题不会造成内存泄露

    • 隔离model层和view层:解耦

    • Fragment间共享数据

  • DataBinding:实现双向绑定,数据和UI同步

    作用:当数据源发生改变时,及时更新给UI(p层做的事情交给系统源码去做)


四、Navigation和Fragment

  • Navigation:导航(回退栈)

  • 三大件:

    • Navigation Graph:导航图,包含了所有导航相关信息的XML资源。一般防止在res/navigation目录下

    • NavHost:容器,用来显示Fragment的,即Activity中的fragment,要求实现NavHost

    • NavController:在NavHost中管理应用导航的对象

    一句话就是,通过NavController,获取当行图中的特定路径以及目标,导航到特定的目标放到NavHost中

    Navigation是用来管理Fragment的切换,并且可以通过可视化的方式,看见APP的交互流程。

  • 优势:

    1、可视化的页面导航图,可以编辑各个组件之间的跳转关系
    2、优雅的支持Fragment之间的转场动画
    3、通过第三方的插件(SafeArgs(Gradle插件))支持Fragment之间类型安全的参数传递
    4、通过NavigationUI类,对菜单,底部导航,抽屉菜单导航进行方便统一的管理
    5、支持通过deeplink直接定位到Fragment


五、Room数据库

  • 轻量级orm数据库(关系映射型),本质上sqlite抽象层,类似于Retrofit库,Room在开发阶段通过注解标记相关功能,编译时自动生成impl实现类

  • 数据库框架的两种实现思路:

    • 关系映射型(orm):根据类对象通过反射的手段获取到类名以及成员变量名作为表名和字段名

      缺点:无法确定类对象中有哪些成员不需要创建表字段

    • 注解+反射:每个业务模块完全独立,不浪费资源,要自定义注解和处理注解

  • Room三大件:

    1、Entity:实体类,对应的是数据库的一张表结构。需要使用注解 @Entity 标记。
    2、Dao:包含访问一系列访问数据库的方法。需要使用注解 @Dao 标记。
    3、Database:数据库持有者,作为与应用持久化相关数据的底层连接的主要接入点。需要使用注解 @Database 标记。
    使用@Database注解需满足以下条件:
    1)定义的类必须是一个继承于RoomDatabase的抽象类。
    2)在注解中需要定义与数据库相关联的实体类列表。
    3)包含一个没有参数的抽象方法并且返回一个带有注解的 @Dao。


六、workManager

  • workManager:可延迟运行,并在应用退出或重启时能可靠运行任务

    应用场景:埋点上传,非即时性上传与下载,同步数据和处理数据

  • 三大件:

    1、Worker:我们要执行的具体任务。需要继承Worker,重写doWork方法,然后在里面写具体的逻辑。
    2、WorkRequest:上面的Worker是定义了我们要在后台的任务,而这个类是对Worker的包装。
    下面两个都是继承了WorkRequest:
    OneTimeWorkRequest: 只执行一次的任务
    PeriodicWorkRequest: 重复执行的任务(重复间隔大于15分钟)
    3、WorkManager:是对WorkRequest的管理类。


七、pager

  • pager:分页加载

  • 三大件:

    • DataSource:数据源,获取数据

    • pagedList:承载数据,可理解为一页数据的集合

    • pagedListAdapter:对RecyclerViewAdapter的一个扩展

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 10:55:38  更:2022-08-06 10:59:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 4:45:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码