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

文章共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
    )

分页

val pageEntityLD &
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值