美文网首页
程序员自我修养之jetpack学习,待加强

程序员自我修养之jetpack学习,待加强

作者: 巴菲伟 | 来源:发表于2021-01-31 16:58 被阅读0次

一、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.传统的路由方式

三、Lifecycle的常用方式

    1.LifecycleObserver

    2.FullLifecycleObserver    

    3.LifecycleEventObserver

    4.用MVP模式仿写Lifecycle的架构

    5.使用LifecycleObserver的方式:

    6.使用LifecycleEventObserver方式:

四、LiveData的框架学习,有时间看如何和Lifecycle绑定的数据

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);

相关文章

网友评论

      本文标题:程序员自我修养之jetpack学习,待加强

      本文链接:https://www.haomeiwen.com/subject/kmtrtltx.html