PureMusic - 是难得一见的最佳实践! 5.1.1

4.6M / 1.4万下载 / 1016人关注 / 86个评论 / 简体中文

   举报

扫码下载APK

应用截图

新版特性

1. Android 12 耳机线控状态权限适配

- - - - - - - - - - - - - -

1.UnPeekLiveData v7.0 升级,内存管理效率与原生齐平,源码逻辑进一步简化。

- - - - - - - - -

1.UnPeekLiveData v6.1 升级,更加简练的源码逻辑,方便阅读理解和后续修改

- - - - - - - - - -

1.修复 TabLayout 在 target 30 以上环境下的显示问题

- - - - - - - - -

1.jcenter 完全移除,迁移至 maven-central
2.为 loginFragment 添加可跟随页面生命周期取消请求的全流程示例

- - - - - -

根据小伙伴的反馈,针对 “页面局部请求失败” 场景下 netStateEvent 使用不便的问题,重新设计 DataResult,并调整为直接回推至 UI 层,如此:

一来 UI 层便有机会根据 DataResult 的 responseStatus 针对请求成功和失败提供不同的 UI 表现,

二来方便语义上的理解,使 “只读数据” 和 “可变状态” 有着明确的区分,方便团队开发人员形成 “**唯一可信源**” 或者说 “单向数据流” 的思维定势,从而规避 “消息同步不一致” 等不可预期的隐患。

- - - - - - - - - -

刚刚为项目中的 ViewModel 全面确立了 “状态分治” 和 “页面通信” 两大场景下的命名,以方便语义上的理解,并对唯一可信源的设计做了补充说明,感兴趣的小伙伴可自行查阅。

- - - - - - - -

移除不必要的移位动画

- - - - - - - -

感谢小伙伴们对 UnPeekLiveData v4.2 的测试和及时反馈 🙏

对于v4.2设计中潜在的内存泄漏隐患,现考虑通过将“ViewModelStore的内存地址而非其对象本身”put到map,来规避内存泄漏的问题。

在使用v4.2版UnPeeLiveData的小伙伴请及时升级到最新的v4.4.1版。

- - - - - - - - -

刚刚在 Jcenter 提交了 UnPeekLiveData v4.0,该版本在 v3.0 的基础上,参考了小伙伴 Flywith24 WrapperLiveData 遍历 ViewModelStore 的思路,全面提升 “防止倒灌时机” 的精准度。

为了尽可能降低学习成本,我们在引入新机制的前提下,尽可能地与传统 LiveData 的使用习惯保持一致,仅在 “订阅者观察处” 做了微调:

需对 Activity 和 Fragment 分别使用 ObserveActivity 和 ObserveFragment,具体缘由可详见代码注释中的解析。

目前在用 UnPeekLiveData v3.0 的小伙伴,可随时升级到 “更快更稳” 的 v4.0。

- - - - - - - - -

1.将 LiveData 的使用范围限制在 UI 层。数据层的请求结果回调透过自定义的 DataResult 完成。
2.添加 BaseRequest 作为 Request 父类,提供网络状态通知的支持。
3.为 UnPeekLiveData 添加 ProtectedUnPeekLiveData 来支持对外只读,使得数据保持从唯一可信源得到的结果,避免收到不可预期的篡改。

- - - - - - -

发行了新版 UnPeekLiveData。UnPeekLiveData 通过独创的 “延时自动清理消息” 的设计,来满足:

消息被分发给多个观察者时,不会因第一个观察者消费了而直接被置空
时限到了,消息便不再会被倒灌
时限到了,消息自动从内存中清理释放
使非入侵的设计成为可能,并最终结合官方 SingleLiveEvent 的设计实现了非入侵重写。

- - - - - - - - -

1.openDrawer liveData 重建恢复状态时重推的修复

- - - -

考虑到此前有多位小伙伴 私下提出想参考 Jetpack MVVM 背景下用户登录的实现方式,刚刚设计并编写了相关案例,

在该案例中,我们展示了:

1.通过DataBinding 双向绑定,来方便通过 State-ViewModel 拿到控件数据,避免直接接触控件实例 导致的一致性问题。

2.被明确区分的 State-ViewModel 和 Request-ViewModel 的边界。它们点到为止、各司其职地完成 从状态分发 到数据驱动的全过程。

3.在该登录案例中,我们演示了在网络状况较差的情况下,如何通知 UI 层状态做出相应的收尾处理。

更多内容,感兴趣的小伙伴可 pull 最新源码查看 😉

- - - - - - - - -
1.升级 DataBinding 的 “严格模式”,默认情况下,不向视图控制器子类提供 mBinding 实例,以彻底规避 视图调用的 null 安全问题。
2.进一步简化 adapter 的编写,可在布局中直接与 RecyclerView 绑定
-
1.修复旋屏回归时的自动打开抽屉
2.修复可叫停业务的 UseCase 的业务逻辑
-
1.在搜索页添加模拟网络请求下载,以及介于 ViewModel 和 DataRepository 之间、可跟随生命周期及时叫停下载任务的 UseCase
2.调整动画:减少转场时间,提升转场逼格
3.适配手势关闭搜索页面
4.修复打开抽屉手势在部分场景下的失效
5.适配 Android 10 手势,在首页右滑播放列表可打开抽屉
-
1.调整 LifeCycle 回调节点,规避 receiver 解绑时的 crash
2.升级 Navigation,修复旋屏回归后页面导航的 crash
3.升级 getViewLifeCycleOwner 以进一步提升 Fragment 下 视图的生命周期安全
4.API 升级
5.增量编译速度优化
-
1.补充网络状态切换提示
2.解决头部快速点击 crash
3.解决通知栏点击 crash
4.添加首页按钮点击的防抖
5.更新抽屉开启机制
-
1.横屏时支持退出
2.更新 baseBindingAdapter
-
1.修改说明
2.资源优化
3.机型顶部显示适配
-
1.修复 PlayerService 退出界面后延续的操作
2.修复 旋转屏幕时播放模式切换提示 的重复推送
3.修复 抽屉在二级页面的展示逻辑
4.修复 网页点击跳转的问题
5.补充 详情页面内容

应用简介

很高兴和大家见面!

上周我在 各大技术社区 发表了一篇 《Jetpack MVVM 精讲》,原以为在 知识网红 唱衰安卓 的 2019 会无人问津,没想到文章一经发布,从 国内知名公司 的架构师、技术经理,到 世界级公司 的 Android 开发 都在看。


并且从读者的反馈来看,近期大部分安卓开发 都已跳出舒适圈,开始尝试认识和应用 Jetpack MVVM 到实际的项目开发中。

只可惜,关于 Jetpack MVVM,网上多是 东拼西凑、人云亦云、通篇贴代码 的文章,这不仅不能提供完整的视角 来帮助读者 首先明确背景状况,更是给还没入门 Jetpack 的读者 徒添困扰、起到劝退的作用。


好消息是,这一期,我们带着 精心打磨的 Jetpack MVVM 最佳实践案例 来了!


本人拥有 3 年的 移动端架构 践行和设计经验,领导团队重构的 中大型项目 多达十数个,对 Jetpack MVVM 架构在 确立规范化、标准化 开发模式 以 减少不可预期的错误 所作的努力,有着深入的理解。

在这个的案例中,我将为你展示,Jetpack MVVM 是如何 以简驭繁 地 将原本十分容易出错、一出错就会耽搁半天时间的开发工作,通过 寥寥的几行代码 轻而易举地完成。


GitHub:https://github.com/KunMinX/Jetpack-MVVM-Best-Practice


应用评分

4.7

共29个评分

详细信息

应用包名:com.kunminx.puremusic
更新时间:2021-11-27 22:58:28
支持ROM:6.0+
开发者名称:KunMinX

权限信息

· 完全的网络访问权限
· 查看网络连接
· android.permission.FOREGROUND_SERVICE
· 读取手机状态和身份
 

扫码查看详情

下载酷安APP

发现应用的乐趣

扫码下载酷安手机APP

扫码下载酷安手机APP

酷安

发现应用的乐趣