Kotlin+协程+LiveData+Flow 一个轻量级的JetpackMVVMLite

该博客介绍了如何使用Kotlin、协程、LiveData和Flow构建一个轻量级的Jetpack MVVMLite框架。文章详细讲解了框架的特性,包括简洁的项目结构、少类设计、LiveEventBus、网络请求简化、协程Flow支持、组件化、viewBinding使用、自定义Kotlin拓展方法等。作者强调了框架的轻量化、易于理解和维护,适用于中小型项目,并分享了未来的发展计划,包括 Jetpack Compose 的集成。

文章共2689个字,预计阅读需约11分钟

一个引入了优质开源库的框架

retrofit2
网络请求库

coil
由 Kotlin Coroutines 支持的 Android 图像加载

BaseRecyclerViewAdapterHelper
adapter库

permissionsdispatcher-ktx
配合kotlin使用的权限请求库

mmkv
使用腾讯的mmkv替代SharePreference的高性能key-value组件

smartRefresh
上拉加载下拉刷新库

shimmerlayout
自由度高,方便使用的骨骼加载

liveEvent
消息总线,基于LiveData,具有生命周期感知能力

UnPeek-LiveData
解决LiveData数据倒灌

ARouter
路由

disklrucache
硬盘缓存

你可以轻松做这些

一目了然的项目结构

方便编写,方便维护

WX20210525-151929@2x.png

类很少

写一个界面你需要创建三个文件,xml布局,activity/fragment,viewmodel,没有其他的了。


LiveEventBus

消息总线,相比于evnetBus和RxBus,具有生命周期感知,而且依赖度小,因为他是依赖于google,而RxBus是依赖于RxJava

//发送消息
LiveEventBus.get(Constant.DEL_ADDRESS_EVENT).post("")

//接受消息
LiveEventBus.get(Constant.EVENT)
    .observe(this, Observer {     
     
})

网络请求代码简约

viewmodel两行代码即可完成基本网络调用并把数据通过liveData回传给界面。demo中举例了三种请求情况,单个实体,接收null,分页。分页请求与不分页的结构相差不大,代码不需要变动太大。

单个实体

val singEntityLD = StateLiveData<User>()
fun singEntity() = launchUI(
        response = { api.singEntity().data!! },
        liveData = singEntityLD
    )

接收null

接收null时,StateLiveData要写死Any?,?是kotlin允许为null。设置allowNull为true,否则livedata不会回传

val mayNullLD = StateLiveData<Any?>().allowNull(true)
fun mayNull() = launchUI(
        response = { api.mayNull().data },
        liveData = mayNullLD
    )
<
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值