文章共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
硬盘缓存
你可以轻松做这些
一目了然的项目结构
方便编写,方便维护
类很少
写一个界面你需要创建三个文件,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 &