Now in Android !AndroidApp开发的最佳实践,让我看看是怎么个事?

在Android的官网,有个示例程序,在官网是这样介绍它的。 developer.android.google.cn/samples?hl=... github github.com/android/now...


那我得看看了。

1、功能介绍

1.1 ForYou 首页

头部是一个标题栏,是一个公用的组件。

中间是一个列表,Item的内容就是Android届的文章和新闻。有图片,标题和描述。标题右边有一个收藏按钮。Item的下边是分类标签,这个文章属于哪一类,哪一个标签。 下边是一个TabBar。 在首页第一次进入的时候,列表时没有数据的,会显示另外一个界面,让你选择你感兴趣的标签。是一个横向的GridView列表。有兴趣的同学可以去github上看看,学一学。

1.2 Saved

这个就是你收藏过的列表,这里边全是你收藏的文章。 列表结构和首页一致。

1.3 Interests

第三个页面就是,选择你感兴趣的标签和分类。选中状态是对钩,首页的数据,根据你选中的标签,去请求数据。

1.4 标题栏

两个功能,一个是搜索,一个是设置主要用来设置主题,和黑暗模式,还有动态颜色

整体的功能就这些。 该说不说这小App设计的还不赖,感觉看起来还是很舒服的。相比我们公司的很妙的UI设计, 参考这篇文章,,,老板,你怎么用Compose画了个墓碑.... 感觉还是这个看起来比较舒服。

2、技术架构

2.1 模块化

这个项目已经完全模块化,分了很多模块

在Now in AndroidDiagram中显示模块的类型和它们在Now in AndroidDiagram中的依赖关系。提示:模块图(如上所示)可以在模块化规划中用于可视化模块之间的依赖关系。 app模块------包含应用级和脚手架类,它们绑定了其余的代码库,比如MainActivity、NiaApp和applevel控制的导航。 一个很好的例子是通过NiaNavHost的导航设置和通过TopLevelDestination的底部导航栏设置。app模块依赖于所有的功能模块和所需的核心模块。 feature: modules------特定于功能的模块,它们的作用域是处理应用程序中的单个职责。这些模块可以被任何应用程序重用,包括测试或其他风味的应用程序,在需要的时候,同时仍然保持分离和隔离。 如果一个类只被一个特性模块需要,它应该留在那个模块中。 如果没有,则应将其提取到适当的核心模块中。 一个特性模块不应该依赖于其他特性模块。 它们只依赖于所需的核心模块。 core: modules------包含辅助代码和特定依赖的公共库模块,它们需要在应用中的其他模块之间共享。这些模块可以依赖于其他核心模块,但它们不应该依赖于功能模块或应用模块。 其他模块-例如同步,基准测试和测试模块,以及app-nia-catalog-一个目录应用程序,用于快速显示我们的设计系统。

这模块还是分的很全的,值得大家学习的,东西还是挺多的。看起来比较高级。

2.2 架构

Now in Android ,遵循官方架构指导。

架构有三层 UI DoMain Data

官方的Android架构不同于其他架构,比如"Clean architecture"。 来自其他体系结构的概念可能不适用于这里,或者以不同的方式应用。

该体系结构遵循具有单向数据流的响应式编程模型。

数据层位于底层,关键概念是:高层对低层的变化作出反应。

事件向下流动。

数据向上流动。

在ForYou界面上显示新闻 当应用程序第一次运行时,它将尝试从远程服务器加载新闻资源列表。(当选择prod构建风格时,演示苟江将使用本地数据库)一旦加载,将根据用户选择的兴趣,显示给用户,下图显示了发生的事件,以及数据如何从相关对象中流出来实现这一目标。

下面是每一步发生的情况,你们可以把源码加载到AndroidStudio中,根据步骤去跟一下。

Step Description Code
1 在应用启动时 将 WorkManager 的所有任务,将被同步执行 Sync.initialize
2 ForYouViewModel 调用 GetUserNewsResourcesUseCase 来获取带有书签,保存状态的新闻列表数据 在用户和新闻存储库都发出一个条目之前,不会有条目被发出到这个流中,在等待期间,feed的状态设置成 Loading. Search for usages of NewsFeedUiState.Loading
3 用户数据仓库从由 Proto DataStore 支持的本地数据源获取一个 UserData 对象流 NiaPreferencesDataSource.userData
4 WorkManager 执行同步任务,该任务调用 OfflineFirstNewsRepository 开始与远程数据源同步数据 SyncWorker.doWork
5 OfflineFirstNewsRepository 调用 RetrofitNiaNetwork 使用 Retrofit 执行实际的 API 请求。 OfflineFirstNewsRepository.syncWith
6 RetrofitNiaNetwork 调用远程服务器上的 REST API。 RetrofitNiaNetwork.getNewsResources RetrofitNiaNetwork.getNewsResources
7 RetrofitNiaNetwork 从远程服务器接收网络响应。 RetrofitNiaNetwork.getNewsResources
8 OfflineFirstNewsRepository 通过在本地 Room 数据库中插入、更新或删除数据,将远程数据与 NewsResourceDao 同步。 OfflineFirstNewsRepository.syncWith
9 当 NewsResourceDao 中的数据发生变化时,它会被发出到新闻资源数据流(这是一个 Flow)。. NewsResourceDao.getNewsResources
10 OfflineFirstNewsRepository 作为此流上的中间操作符,将传入的 PopulatedNewsResource(数据库模型,内部用于数据层)转换为公共 NewsResource 模型,供其他层消费。 OfflineFirstNewsRepository.getNewsResources
11 GetUserNewsResourcesUseCase 将新闻资源列表与用户数据结合,发出一个 UserNewsResources 列表. GetUserNewsResourcesUseCase.invoke
12 当 ForYouViewModel 接收到可保存的新闻资源时,它会将 feed 状态更新为成功。 ForYouScreen 然后使用状态中的可保存新闻资源渲染屏幕。 Search for instances of NewsFeedUiState.Success

大体的架构就是这样,更详细的架构介绍 github.com/android/now...

3、总结

这个App用到了Flow流,Room,Retrofit,Compose,还有Hilt(听说是KPI产品)模块化,协程,是个不错的App,我觉得有点麻烦,所以说我需要学习的东西还是有很多的,这个App的具体学习,以后会出单门的文章去学习。这篇先给大家介绍一下!

相关推荐
stevenzqzq1 小时前
Android Jetpack Compose 列表开发指南:为什么你不需要再为底部 Item 写额外间距
android·android jetpack
海宇数据8 小时前
零信任架构实战:基于海宇网上踪迹欺诈行为识别构建自动化信贷资信评估网关
运维·人工智能·架构·自动化
翼龙云_cloud9 小时前
亚马逊云服务器服务代理商:Bedrock 实践经验 Serverless 架构下的 AI 自动化落地
服务器·架构·serverless·云计算·aws
撩得Android一次心动9 小时前
Jetpack Compose 知识点整理2【个人用】
android·笔记·学习·kotlin·compose
烛影摇红透纱窗9 小时前
AI从零介绍代码架构的复盘(含要使用的提示词)
人工智能·架构
是真的小外套10 小时前
2024年软考中级信息安全工程师|选择题考点+案例分析真题解析(含答案)
android·网络
小天源11 小时前
从 Nginx 日志到访问分析:轻量化网站监测服务的架构实践
jvm·nginx·网络安全·架构·网络监控
数据工匠老o11 小时前
异构数据库DDL同步:260条链路的结构变更自动适配方案
数据库·架构
用户20187928316712 小时前
一文讲透 Android Native Heap 监控原理:一间"只进不出"的仓库,和总部派来的侦探
android
破烂三角裤12 小时前
AI 应用上线后如何判断质量:Prompt 版本、评测集与可观测性
架构