一、jetpack的常用框架
1.Navigation框架:为单个Activity架构而生的端内路由
特性:Activity、Fragment、Dialog提供路由能力的组件、导航时可携带参数、指定转场动画、支持deeplinp页面直达、fragment回退栈管理能力
2.Lifecycle:具备宿主声明后期感知能力的组件
特性:它支有组件生命周期状态的信息,并且允许其他对象观察此状态
3.ViewModle:具备生命周期感知能力的数据存储组件
特性:页面配置更改数据不丢失、生命周期感应、数据共享
4.LiveData:具备生命周期感知能力的数据订阅、分发组件
特性:支持共享资源、支持粘性事件的分发、不需要手动处理生命周期、确保界面符合数据状态
5.Room:轻量级orm数据库,本质上是一个SQLite抽象层
特性:使用更加简单,通过注解的方式实现相关功能。编译时自动生成实现类impl
6.DataBinding:dataBinding只是一种工具,它解决的是View和数据之间的双向绑定
7.WorkManager:新一代后台任务管理组件,功能十分强悍
特性:支持周期性任务调度、链式任务调度、丰富的任务约束条件、即便程序便是退出,依旧能保证任务的执行
8.Paging:列表分页组件,可以轻松完成分页预加载以达到无限滑动效果
二、Navigation框架组件原理解析
它的缺点:
1.fragment切换时候会销毁,下次还需要重新创建·
2.所有东西都需要去mobile_navigation.xml里面注册,不利于维护,没有动态化去写入和控制
1.为什么需要路由框架
降级、组件化、原生和H5
2.路由应该具备什么能力
分发、管理、控制
路由大致框架:编译时注解方式、拦截器(重定向、错误页面统一处理)、过程监听(onActivityResult、onStartActivity等)
3.传统的路由方式
![](https://img.haomeiwen.com/i16293373/7116052adc73e6d5.png)
三、Lifecycle的常用方式
1.LifecycleObserver
2.FullLifecycleObserver
3.LifecycleEventObserver
![](https://img.haomeiwen.com/i16293373/d59a37df712a5a8f.png)
4.用MVP模式仿写Lifecycle的架构
![](https://img.haomeiwen.com/i16293373/8fc093fd916f7889.png)
![](https://img.haomeiwen.com/i16293373/20701c15b8f55a3e.png)
![](https://img.haomeiwen.com/i16293373/0b5c5ca51b1847e5.png)
![](https://img.haomeiwen.com/i16293373/c1838cafce4d122f.png)
5.使用LifecycleObserver的方式:
![](https://img.haomeiwen.com/i16293373/9a8cd2374e2915c3.png)
6.使用LifecycleEventObserver方式:
![](https://img.haomeiwen.com/i16293373/ff4f610039d206bb.png)
四、LiveData的框架学习,有时间看如何和Lifecycle绑定的数据
![](https://img.haomeiwen.com/i16293373/2e9a1bc4aa15f6b6.png)
MutableLiveData使用方法:
number =new MutableLiveData<>();
//设定初始数值
number.postValue(0);
//调用number.postValue数值就可以通过监听发生改变
//做数据的监听
number.observe(this,new Observer() {
@Override
public void onChanged(Integer integer) {
Log.i("ceshidaima","onChanged---->integer="+integer);
}
});
MediatorLiveData使用方法:可以把多个observer合并为一个在observe里面处理
var mediatorLiveData: MediatorLiveData<UserInfo> = MediatorLiveData()
val user1 = UserInfo("李四1", (1000..5000).random())
val user2 = UserInfo("李四2", (1000..5000).random())
mediatorLiveData.addSource(data1, object : Observer<UserInfo> {
override fun onChanged(info: UserInfo) {
mediatorLiveData.value = info
}
})
mediatorLiveData.addSource(data2, object : Observer<UserInfo> {
override fun onChanged(info: UserInfo) {
mediatorLiveData.value = info
}
})
mediatorLiveData.observe(this, Observer {
if (it.name.contains("1")) {
mTvShow.text = "姓名:${it.name} \n薪水:${it.salary}"
} else {
mTvShowOther.text = "姓名:${it.name} \n薪水:${it.salary}"
}
})
五、WorkManager:新一代后台任务管理组件(不是很重要,可以先学)
Constraints constraint =
new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build();
OneTimeWorkRequest build =new OneTimeWorkRequest.Builder(MyWork.class)
.setConstraints(constraint).build();
mMyWork.enqueue(build);
网友评论