现代化 Android 开发:多 Activity 多 Page 的 UI 架构

在古老的 Android 时代,基本上一个 Activity 就代表一个界面,所以开发不需要做选择,但随着技术的迭代与框架的完善,Fragment 的使用成为主流,再进化为 Jetpacknavigation。再到如今越来越火热的 Compose。同是 Android 开发,可能选择的技术栈已经完全不一致了,所以入门学者也容易眼花缭乱。

纯 Activity 时代

Activity 作为最基础的四大组件之一,使用相对简单:

  1. AndroidManifest 注册
  2. 通过 startActivity 或者 startActivityForResult 启动,现在也可以通过 LauncherForActivityResult 来启动
  3. 通过 finish 结束 Activity

其主要的问题就是需要在 AndroidManifest 中注册,开发过程中容易忘记。若需要做 patch、插件化等功能,就必须搞一些 HolderActivity 预注册,也是相当麻烦的。

除此之外,它本身是一个很重的组件,启动一个 Activity 就会有跨进程的操作,比较耗时。除此之外,动画控制也不是那么的灵活。

Fragment 入场

Fragment 原本是为了给平板使用的,最简单的例子就是列表-详情,手机端是列表界面点击进入详情界面,而平板则可以左侧列表,右侧详情。

但随着 Fragment 的发展,因为其灵活性,它反而成了界面开发的主角,造就了单 ActivityFragment 架构。

ActivityFragment 架构。 Activity 就是一个承载 Fragment 的容器,所有的界面由 Fragment 承载,由于 Fragment 的事务型启动很繁琐,所以官方又出品了 Navigation 库来解决这个问题。但 Navigation 库需要创建并注册 Graph,也是一个繁琐的事情。

路由框架入场

ActivityFragment/Navigation 的启动新界面的方式各不相同, Navigation 还有一个创建 Graph 的方式,代码编写极其繁琐,所以又诞生了统一接口的路由框架,其主要解决以下几个问题:

  1. 启动方式的大一统
  2. Navagation 注册表的代码自动生成
  3. 传参的大一统,Activity 使用 Intent添加参数, Fragment 使用 Bundle
  4. module 的界面启动(模块化需求)

由于官方没有出品,所以就是由各个业务职能部门创建,诸如:ARouterTheRouterQMUI SchemeEmo Scheme 等库。

ARouterTheRouter 偏向于模块化。

而个人开发的 QMUI SchemeEmo Scheme 则没有支持模块化,而是在多 ActivityPage 的支持上花费了很大工费。这里一个 Page 可以是Fragment 也可以是 Compose

ActivityPage 架构是指我们可以使用多个 Activity, 每个 Activity 都可以是多 Page 的存在, 具体是否要使用 Activity, 则由开发根据业务逻辑决定。

QMUI Scheme 支持了多 ActivtyFragment 架构。

Emo Scheme 支持了多 ActivityCompose 架构。

这是二者的差异,在 Emo Scheme 开发时,我觉得 Compose 诞生后,Fragment 就是一个积累的存在了,所以现在我就完全抛弃它了。

那为何要采取多 ActivityPage 呢?

  1. 可以根据业务逻辑更好的做数据复用。举个例子,注册流程,可能分成数个界面,最中收集到全部数据,我的做法是用一个 RegActivity, 每一个环节用 RegUserNamePageRegAvatarPage 等,数据放在 RegActivityViewModel 里供所有 Page 使用,就不用数据传来传去了。而注册成功后到新的 Activity, 销毁 RegActivity
  2. 某些场景用单独的 Activity 更舒服:
    • 全屏。 如果会涉及全屏切换,那单独出一个 Activity 就更友好。因为我们设置全屏标志位是相对于 Activity 而言的。全屏界面跳转到非全屏界面,非全屏界面跳转全屏界面,如果用单 Activity 去维护,那是一件很痛苦的事情。
    • 需要用到 ActivitylaunchMode 的场景,例如播放器,需要 singleTask 之类的模式
    • 需要一次性销毁多个 Page 的情况,例如前面注册流程的例子,我注册过程中,用户可以返回到上一个 Page, 但是当注册完成后,那就直接销毁 RegActivity
  3. 目前 Compose 里嵌套 WebViewNavigation 转场动画效果有点差,所以我是选择用 Activity 去承载。

总而言之,之所以把框架做得这么复杂,就是期望开发能够认真思考业务流程,要根据我们的业务流程认真的考虑我们该以什么样的容器去承载我们的界面更合适。选择正确,往往能取到事半功倍的效果。

目前而言,Emo Scheme 是所有路由框架中对这一块中支持得最好的,具体使用方法可以前往官网了解。

最后

世上没有最好的架构,只有最适合自己的。UI 往往是变动最频繁的业务,所以了解各个组件的优缺点,根据业务逻辑去选用最适合的,才是高效开发的捷径。不管怎样,都是有无数坑点的,趋利避害才是 UI 的归宿。UI 最好的经验就是知道各个组件有什么坑点,如何避开。不然随便一个坑,就够开发加好一会儿班了。

文末

如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
img
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。

欢迎大家一键三连支持,若需要文中资料,直接扫描文末CSDN官方认证微信卡片免费领取↓↓↓

PS:群里还设有ChatGPT机器人,可以解答大家在工作上或者是技术上的问题

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

五年磨一剑——Sealos 云操作系统正式发布!

这是个宏伟的计划 这是一个宏伟的计划,漫长且有趣。 2018 年的某个夜晚,夜深人静,我挥舞键盘,敲下了 Sealos 的第一行代码。当时仓库命名为 “kubeinit”,后来觉得格局太小,我不可能只做一个安装 Kuberne…

ChatGPT-所见、所闻、所感

作者:刘聪NLP(NLP算法工程师) 文章经过作者同意转载 作为一个NLP工程师,自22年11月30号起,我的心态的从焦虑到平静再到焦虑,每天的感觉就像做过山车一样,跌宕起伏,只因它-ChatGPT。 …

巴黎时装周儿童单元上海站圆满举行,徐圣恩受邀参加

10月2日,作为国内最具知名度和专业性的儿童时装周,巴黎时装周儿童单元上海站隆重举行。巴黎时装周儿童单元由巴黎高定协会举办,为孩子提供一个展示梦想的舞台,自公开以来就受到社会的广泛关注与支持。著名艺人徐圣恩受邀出席本站活…

2021秋冬上海时装周开启,聚焦8大国内外品牌

2021年4月7日,上海时装周SIFS AW2021于上海静安嘉里中心正式开启,平台汇集国内外高端礼服品牌,聚焦时尚,华丽盛放。 本季上海时装周SIFS,聚焦8大国内外品牌。意大利品牌NICOLE作为全球婚纱标杆,首度来到中国…

iNFTnews丨众多时尚品牌参加元宇宙时装周,抢先把握数字时尚的未来

元宇宙作为一个全新的概念,却已在许多行业有着或轻或重的影响,其对万亿美元零售业的影响最近在元宇宙时装周 (MVFW) 上得以显现。这种完全虚拟的体验于 2022 年 3 月 24 日至 27 日在以太坊区块链上的去中心化虚拟社交平台 Decentraland 举行。线上活动吸…

一秒钟变身明星:用swapface软件体验星光熠熠的感觉!

你是否曾经想过能够用电脑或手机来实时地将自己的面部与其他人或角色进行交换?你是否曾经想过能够用一款简单易用的软件来制作出有趣或惊艳的面部交换直播、视频或图片?如果你的答案是肯定的,那么你一定要试试swapface软件,这是一…

COSELF 次元秀场伦敦时装周预告 #虚拟时尚

在虚拟世界里的未来服装,能自由变化自己的样貌和服饰。或许未来会作为人类皮肤的第二表征,极大解放人们的精神自由。 COSELF 次元秀场 「预告」 数字高定系列 时间:本月 17 - 21 日 地点:当季伦敦时装周 「COSELF 次元秀场-数字高…

小米二代真的性价碉堡了?对不起,雷军在搞期货交易

小米2代1999的价格真的碉堡了么?事实真的是如此吗?小米2手机为什么看起来性价比那么高?答案是,那是期货价格!事实上,到了十月中旬你也不一定能够买到,可以想象首次发售一定是限定很少的数量&…

XuperSocial首个明星DApp上线,探索区块链分布式通信基础设施

12月7日,星际口袋上线星际社区,为广大藏友提供稳定、可信的交流场所。 星际社区基于百度超级链团队重磅发布的去平台化社交解决方案XuperSocial搭建,XuperSocial是架设在百度超级链开放网络(XuperOS)上的DApp&#xff…

初识以太坊 ——钱包、测试网络和简单交易

以太币单位 • 以太坊的货币单位称为以太,也称为ETH或符号Ξ • ether被细分为更小的单位,直到可能的最小单位,称为wei;1 ether 10^18wei • 以太的值总是在以太坊内部表示为以wei表示的无符号整数值。 • 以太的各种单位都有一个…

Steam注册遇到CAPTCHA问题,一直注册不了,一个简单的注册办法

这个问题一直解决不了 后来我就用了V.P.eN翻墙在Google Chrome上粘贴进入网址再注册就巨快 我自己用的一个很简洁,好用免费的VPeN叫白鲸 V.P.eN下载网址:https://www.bjch110.com/?mid1003 下载安装都很简单 然后白鲸显示连接上后,就打开Goo…

Android Studio实现智能聊天机器人

项目目录 一、需求分析1、业务需求分析2、模型需求分析3、界面需求分析 二、开发环境三、聊天功能业务实现1、✨申请机器人身份标识2、搭建聊天界面布局3、搭建聊天条目布局4、封装聊天信息实体类5、编写聊天列表适配器6、实现智能机器人通信 四、项目效果五、项目总结六、源码…

Android智能聊天机器人

苹果有Siri,百度有小度,小米有小爱,而且后来竟然又出了个小兵,总之类似的智能聊天机器人是越来越多了。面对这样智能的机器人,我们似乎只能是体验者。想想底层的算法就让人头疼,它到底是怎么识别出一句话的意思的&…

德国IT行业薪酬水平大揭秘--2020

点击 欧盟IT那些事 关注我们 公告:因企鹅审核规定,本公众号从《德国IT那些事》更名为《欧盟IT那些事》。 所有脱离工龄、级别、职位、经验、城市以及裙带关系来谈论工资,都是耍流氓! 一般来说IT行业公司,资历是按等级划…

德国IT行业薪酬水平大揭秘--2023

点击 欧盟IT那些事 关注我们 公告:因企鹅审核规定,本公众号从《德国IT那些事》更名为《欧盟IT那些事》。 所有脱离工龄、级别、职位、经验、城市以及裙带关系来谈论工资,都是耍流氓!2022-23年,SAP行业薪酬异军突起&…

当事务Transactional遇见异步线程出现的坑

问题 开发小伙伴遇到线上环境消息推送不成功,排查日志发现推送是id为null 代码示例 Transactional(rollbackFor Exception.class) public void register(UserDTO dto) {User user BeanCopyUtils.copyBean(dto, User.class);insert(user);//注册成功消息推送exe…

511遇见电脑PC任意多开绿色软件

电脑端的微信只能单开,为了工作方便需要,我们有时候需要开启多个微信账号,511遇见制作一个微信多开端。 微信vx多开器特点 1.支持自动获取电脑上的微信安装路径 2.支持手动获取微信安装路径 3.支持所有版本的微信多开 4.支持自定义任意多开数…

当互联网码农遇见国企老同学

本文转载自程序员技术 码农张小北和国企职员王志强, 是同一所大学、同一个专业、同一间宿舍, 睡上下铺的兄弟。 毕业那年, 性格沉闷的张小北去了互联网公司, 善于处事的王志强选择了一家国企。 两个不同的选择, 在…

抖音直播带货数据统计,直播带货要复盘哪些数据指标

抖音直播电商数据分析需要围绕“带货”这个核心目标展开,这其中就涉及到“人、货、场”这三个概念,也就是抖音直播的流量、商品和直播间。 这三个概念组合起来,就是抖音直播电商需要关注的核心问题,也是我们数据分析的重点: 1. 不同商品适合在什么类型的直播间推广? 商品在…

带货直播系统,实现直播重要的一步——推流

什么是rtmp? RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议&…