栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

是时候上车Jetpack了,内含音乐播放器实例,专题解析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

是时候上车Jetpack了,内含音乐播放器实例,专题解析

之前公司项目用的一直是MVP框架,我个人也在几个月前基于鸿神 WanAndroid API开发了一款MVP版的App,使用MVP的过程最深的感受是开发效率极低,往往写一大堆接口,可复用的屈指可数。年初了解了Jetpack模式下的MVVM,在LiveData、ViewModel、DataBinDing的加持下实现了单向依赖和数据绑定,代码量大幅度减少,根据Jetpack的特性项目稳定性也提升了不少。

为了更深入的理解Jetpack中各个组件,在前段时间基于Jetpack MVVM又实现了一版WanAndroid。相比上一版的MVP增加了夜间模式和音乐播放器,播放器界面仿照网易云音乐。App中也大量的使用属性动画让界面简约而不简陋。先上图look一波

关于播放器当前只支持读取本地音乐,如果想体验可以事先下载几首歌

先附上github:github.com/zskingking/…

2. 应用技术

基础框架选用MVVM,选用的Jetpack组件包括Lifecycle、ViewModel、LiveData、DataBinDing、Navigation、Room。

项目基于Navigation由单Activity多Fragment实现,使用这种模式给我最直观的感受就是快,比如点击搜索进入搜索界面的衔接动画,在多Activity之间是不可能这么连贯的。

整个项目全部使用Kotlin语言,广泛应用了协程编写了大量的扩展函数。

关于每个模块的职责我是这样定义的:

Model

对应项目中Repository,做数据请求以及业务逻辑。很多人将业务逻辑编写到VM层,但我个人认为写在Model层更为合适,因为数据和业务逻辑本身就是息息相关,拿到数据及时处理业务逻辑,最后通过ViewModel注入的LiveData将数据发送给View层。在该层我也对协程做了封装,以及统一捕获处理错误信息。 代码大概张这样:

typealias Error = suspend (e: ApiException) -> Unit

op

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整资料开源分享

en class baseRepository(

private val coroutineScope: CoroutineScope,

private val errorLivedata: MutableLiveData

) {

protected fun launch(

block: suspend () -> T

, success: suspend (T) -> Unit

, error:Error? = null): Job {

return coroutineScope.launch {

runCatching {

withContext(Dispatchers.IO) {

block()

}

}.onSuccess {

success(it)

}.onFailure {

it.printStackTrace()

getApiException(it).apply {

error?.invoke(this)

toast(errorMessage)

//统一响应错误信息

errorLiveData.value = this

}

}

}

}

private fun getApiException(e: Throwable): ApiException {

}

}

ViewModel

基于Jetpack中的ViewModel进行封装(友情提示:Jetpack ViewModel和MVVM ViewModel没有半毛钱关系,切勿将两个概念混淆)。在项目中VM层职责很简单,通过内部通过LiveData做数据存储,以及结合DataBinding做数据绑定。

View

尽量只做UI渲染。与MVP中不同,View是通过DataBinding与数据进行绑定,Activity或Fragment非常轻盈只专注于生命周期的管理,数据渲染基本全部由DataBinding+BindAdapter实现。

关于MVVM模版类的封装可至package com.zs.base_library.base(包名)下查看。

最后是今天给大家分享的一些独家干货:

【Android开发核心知识点笔记】

【Android思维脑图(技能树)】

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

【Android高级架构视频学习资源】

MZ9CLZC8-1640328782227)]

【Android思维脑图(技能树)】

[外链图片转存中…(img-RDgGz58t-1640328782257)]

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

[外链图片转存中…(img-dbWbHe52-1640328782258)]

【Android高级架构视频学习资源】

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678920.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号