写点什么

Android Jetpack 架构开发组件化应用实战

用户头像
Android架构
关注
发布于: 11 小时前


本项目采用组件化+MVVM 架构进行开发,对功能组件和业务组件进行拆分,通过 ARouter 进行组件之间的通信。本文主要是对整个应用的技术架构作一个简单的介绍。


项目地址:Android Jetpack架构开发组件化应用实战 欢迎 star


技术要点



Kotlin+Jetpack+Coroutines+Retrofit+koin

项目整体架构图:



宿主 App 没有任何的业务代码,整个业务被拆分为各个 ft_lib 模块。对一些功能组件进行封装抽取为 lib,提供给上层依赖。ft_lib 之间没有任务依赖关系,通过 Arouter 进行通信。


首页功能




首页分为 5 个 Tab,主要为首页、项目、导航、体系和我的。


整个页面框架使用 BottomNavigationView + Navigation 来搭建。通过 menu 来配置底部菜单。 通过 NavHostFragment 来配置各个 fragment。系统提供的 FragmentNavigator 的 navigate 方法中是通过 replace 来加载 fragment。 这就导致在切换 Tab 的时候 fargment 会重复的调用 onCreateView 方法。这肯定不是我们需要的。那么我们需要自定义自己的 FragmentNavigator 来替换系统 的,通过 show 和 hide 的方式来加载 fragment。具体方式会在后续系列文章中进行讲解。


因为 App 使用了沉浸式状态栏,那么在使用的过程中也会出现只有第一个 fragment 的沉浸式是起作用的,其他的基本不生效。这个问题要从系统源码着手解决。 根本原因是这段代码:


private WindowInsets brokenDispatchApplyWindowInsets(WindowInsets insets)


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


{


if (!insets.isConsumed()) {


final int count = getChildCount();


for (int i = 0; i < count; i++) {


insets = getChildAt(i).dispatchApplyWindowInsets(insets);


if (insets.isConsumed()) {


break;


}


}


}


return insets;


}


复制代码


直接 break 了。所以我们也需要自定义一个 view 来重写 dispatchApplyWindowInsets 方法。具体也会在后续文章中进行讲解。


下面就简单介绍下各个 Tab 的技术要点。

首页

首页主要分为顶部 Banner 和底部的文章列表。列表使用 Paging 加载。 并且封装了 AbsListFragment 和 AbsListViewModel 来快速搭建列表页面。 AbsListFragment 主要是封装了页面布局相关的元素。 AbsListViewModel 主要是封装了 paging 的一些常用配置等信息。 通过上述两个封装我们在开发列表页面的时候只需要关系 DataSource 和 adapter 即可。

项目

项目 Tab 主要使用的是 TabLayout 和 ViewPager2 来配合实现联动。同样的 ViewPager2 的页面也是直接继承了 AbsListFragment 来实现列表页面。

导航

导航页面主要分为顶部的搜索和底部的分类。点击搜索后打开新的页面。通过 fragment 来承载热门搜索和搜索返回结果。 底部的分类主要是通过 RecyclerView+ViewPager2 来实现的。通过设置 ViewPager2 的 orientation 为 ORIENTATION_VERTICAL 来实现列表滑动。

体系

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android Jetpack架构开发组件化应用实战