NowinAndroid—2024 Android现代开发全功能应用

NowinAndroid—2024 Android现代开发全功能应用

现代Android开发全功能示例应用Now-in-Android,它是用Kotlin和Jetpack Compose开发的,功能非常强大。这个应用遵循了安卓设计和开发的最佳方法,旨在给开发者提供实用的参考资料。无论你是新手还是专家,都能从中学到很多有用的知识和技巧。

作为一款开发中的应用,它的目标是通过定期提供新闻更新,帮助开发者们与安卓开发的世界保持同步。该应用目前正在开发中prodRelease版本已经在Play商店上可用。

“Now in Android” 应用展示了 “Now in Android” 系列的内容,用户可以浏览最新的视频、文章和其他内容的链接。此外,用户还可以关注自己感兴趣的主题,当有新内容发布与其关注的主题相匹配时,会收到通知提醒。


Now in Android应用遵循官方架构指南及模块化开发。

UI

该应用采用了 Material 3 设计准则进行设计。

所有的屏幕和用户界面元素都是使用 Jetpack Compose 构建的。

该应用有两个主题:

动态颜色主题 - 根据用户当前的颜色主题使用相应的颜色(如果支持)
默认主题 - 当不支持动态颜色时,使用预定义的颜色
每个主题都支持暗黑模式。

应用采用自适应布局,以支持不同尺寸的屏幕。

app架构

在app架构学习过程中,您将深入了解 Now in Android 应用的架构:包括其各个层级、关键类以及它们之间的相互作用。
app架构包含三层: data layer, domain layer 和 UI layer。


该架构采用了响应式编程模型,具有单向数据流。在最底层是数据层,其核心概念包括:

  • 上层对下层的变化进行响应。
  • 事件从上层向下流动。
  • 数据从下层向上流动。
  • 使用流实现数据流,采用 Kotlin Flows 实现。

示例:显示新闻列表

当应用程序首次运行时,它会尝试从远程服务器加载新闻资源列表(在选择“正式版”构建时,演示版本将使用本地数据)。加载完成后,根据用户选择的兴趣向其展示这些新闻。
下面的图示展示了所发生的事件以及数据如何从相关对象中流动,实现这一目标。

模块化

在这个学习过程中,您将深入了解模块化概念,以及在 Now in Android 应用程序中用于创建模块的模块化策略。
模块化是将原本庞大且单一的代码库拆分成松耦合、自包含的模块的一种实践。

模块化优点

  1. 可扩展性:模块化将关注点分离,使得项目更容易扩展和修改,提供了更大的自主权和架构模式的支持。

  2. 并行工作:模块化减少了版本控制冲突,使得开发人员在大型团队中能够更高效地并行工作。

  3. 单一职责:每个模块都有专门负责的所有者,负责维护代码、修复错误和审核更改。

  4. 封装性:隔离的代码更易于阅读、理解、测试和维护。

  5. 减少构建时间:利用 Gradle 的并行和增量构建可以减少构建时间。

  6. 动态交付:模块化是 Play Feature Delivery 的要求,可以根据条件或按需下载特定功能。

  7. 可重用性:适当的模块化使得代码共享和从相同基础构建多个应用程序成为可能,跨不同平台。

模块化缺点

  1. 过多的模块会增加构建配置的复杂性,导致 Gradle 同步时间增加,并产生持续的维护成本。

  2. 如果模块数量过少、大而紧密耦合,就会失去模块化的好处,形成另一个庞大的模块。

  3. 模块化可能会导致项目过于复杂,没有一种通用解决方案。并不是所有项目都适合进行模块化,特别是对于规模较小且不太可能进一步扩展的项目来说,可扩展性和构建时间优势可能并不适用。

综上所述,模块化是有益的,但需要根据实际情况进行权衡和决策。

模块化策略

需要遵循2条原则

低耦合 - 模块之间应该尽可能独立,这样对一个模块的更改对其他模块的影响应该为零或最小。

高内聚 - 一个模块应该包含一个作为系统运行的代码集合。它应该有明确定义的职责,并在某些领域知识的界限内保持。

NowinAndroid中的模块化类型

参考链接

https://developer.android.com/topic/architecture
https://developer.android.com/jetpack/compose
https://developer.android.com/topic/architecture
https://github.com/android/nowinandroid
https://m3.material.io/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/314334.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

做饭这些事:工程师用热风枪来烤鸡翅~

作为一枚合格的工程师,经常会重点关注如何用自身本领及工具来处理事情,其中之一便是做饭!工程师人才济济,区区做饭这些事,So Easy!下面将分享如何用热风枪制作一盆香喷喷的烤鸡翅~ 1、准备工作首先&#xf…

计算机系统(软考版)----计算机系统基础知识、基本单位与进制(1)

文章目录 计算机系统基础知识一 硬件组成二 CPU功能三 CPU组成运算器控制器寄存器组 练习题(答案为加粗部分) 计算机基本单位与进制一 计算机基本单位二 进制1 概述2 进制转换3 进制加减 练习题(答案为加粗部分) 计算机系统基础知…

Rust 最新版1.75.0升级记

升级方法 稳定版 C:\>rustup update stable info: syncing channel updates for stable-x86_64-pc-windows-msvc info: latest update on 2023-12-28, rust version 1.75.0 (82e1608df 2023-12-21) info: downloading component cargo 5.9 MiB / 5.9 MiB (100 %) 3.…

C#超市管理系统源码

C#超市管理系统源码 功能齐全的超市管理系统,专门美化过UI 请先附加数据库,否则无法进入系统 默认拥有最高权限账户为经理,密码为admin 压缩包内有使用说明

Postman接口测试神器从安装到精通

Postman 的优点: 支持各种的请求类型: get、post、put、patch、delete 等支持在线存储数据,通过账号就可以进行迁移数据很方便的支持请求 header 和请求参数的设置支持不同的认证机制,包括 Basic Auth,Digest Auth,OAu…

索引策略-多列索引

一. 前言 当我们对多列索引的理解不够深刻的时候,往往会为每个列创建独立的索引或者按照错误的顺序创建多列索引。 二. 案例说明 问题一: 为每个列创建独立索引 CREATE TABLE t(c1 INT,c2 INT,c3 INT,KEY(c1),KEY(c2),KEY(c3) );这种索引策略,一般都是由于人们听到一些专家诸…

【Python进阶必备】一文掌握re库:实战正则表达式

目录 re库初识 re库基础使用方法 compile()函数 基本用法 正则表达式常用规则字符 match与search方法 match search match/search findall与finditer方法 使用findall()返回所有匹配项 使用findall()提取多个组的匹配 使用finditer()逐个返回Match对象 使用findi…

Android14之解决Pixel手机联网出现感叹号(一百八十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

MySQL的Windows系统安装

一、MySQL的Windows系统安装 1、下载MySQL安装包 打开如下链接地址,下载安装包 2、安装并配置 双击下载好的安装包进行安装,出现如下界面: 选择【 Full 】选项,然后单击【 Next 】按钮。 出现如下界面,单击【 Execute…

数据结构实战:利用JavaScript和Python实现链表

文章目录 一、实战概述二、链表(一)链表概述(二)结点结构(二)链表结构 三、利用JavaScript实现链表(一)创建LinkedList.js(二)创建LinkedList.html&#xff0…

数字图像处理常用算法的原理和代码实现详解

本专栏详细地分析了常用图像处理算法的数学原理、实现步骤。配有matlab或C实现代码,并对代码进行了详细的注释。最后,对算法的效果进行了测试。相信通过这个专栏,你可以对这些算法的原理及实现有深入的理解!   如有疑问&#xf…

中通快递批量查询方法

你是否经常需要处理大量的中通快递单号,却苦于一个个等待查询?现在,有了固乔快递查询助手,这个问题迎刃而解!通过批量查询功能,你可以轻松管理、追踪你的中通快递单号,大大提高工作效率。 一、下…

结构体成员 分数比较大小

题目&#xff1a; 代码&#xff1a; #include <bits/stdc.h> #include<cstring>using namespace std;struct Num{double fenzi;double fenmu;char fenhao;};bool cmp(Num r1,Num r2){return r1.fenzi/r1.fenmu<r2.fenzi/r2.fenmu;}int main(){int n;Num num[n…

基于net6的asp.net core webapi项目打包为docker镜像,并推送至私有镜像仓库harbor中

基于net6的asp.net core webapi项目打包为docker镜像&#xff0c;并推送至私有镜像仓库harbor中 0、环境说明1、打包步骤1.1 创建Asp.net core WebApi项目1.2 在Asp.net core WebApi项目根目录下创建Dockerfile文件1.3 在子系统Ubuntu20.04.4中通过docker build生成docker镜像1…

游戏测试大揭秘,帮你轻松过关

游戏测试可以看作是软件测试的一个分支&#xff0c;黑盒测试最基本的要求是会玩游戏。小公司会要求测试能力更加全面的员工&#xff0c;其中除了功能测试还要会性能测试&#xff0c;兼容测试&#xff0c;弱网测试&#xff0c;自动化测试等。 游戏测试是游戏开发过程中必不可少…

vue2-手写轮播图

轮播图5长展示&#xff0c;点击指示器向右移动一个图片&#xff0c;每隔2秒移动一张照片&#xff01; <template><div class"top-app"><div class"carousel-container"><div class"carousel" ref"carousel">&…

Tensorflow2.0笔记 - 修改形状和维度

本次笔记主要使用reshape&#xff0c;transpose&#xff0c;expand_dim&#xff0c;和squeeze对tensor的形状和维度进行操作。 import tensorflow as tf import numpy as nptf.__version__#tensor的shape和维数获取 #假设下面这个tensor表示4张28*28*3的图片 tensor tf.rando…

RAG 详解

原文&#xff1a;GitHub - Tongji-KGLLM/RAG-Survey 目录 RAG调查 什么是RAG&#xff1f;RAG的范式 幼稚的 RAG高级 RAG模块化 RAG如何进行增强&#xff1f;RAG 还是微调&#xff1f;如何评估 RAG&#xff1f;前景 严峻的挑战多式联运扩展RAG的生态系统RAG论文清单 增强阶段 …

C++多线程学习[二]:线程的传参以及传参的一些坑

一、线程的传参 #include<iostream> #include<thread> #include<string> using namespace std; void threadtest(int a,double b,string str) {this_thread::sleep_for(100ms);cout << a << " " << b << " " &…

【Linux】编写第一个小程序:进度条

文章目录 1. 预备知识1.1 简单认识几个函数1.1.1 sleep()1.1.2 fflush()1.1.3 usleep()1.1.4 memset() 1.2 缓冲区1.3 回车与换行 2. 编写入门版的进度条2.1 基本逻辑2.2 美化效果2.3 代码实现2.4 执行效果 3. 编写升级版的进度条3.1 代码实现3.2 执行效果 1. 预备知识 1.1 简…