Android 四大组件全解读,看完直接怼产品经理

你应该使用MVC还是MVP还是MVVM?我不知道。实际上,我在学校时只知道MVC,其他的架构模式是我临时google搜索后才写在这里的。

这也许令人吃惊,因为Android给人的感觉是,它对应当怎么写APP有着自己很强烈的看法,这种看法体现在它的Java APIs和四大组件等一些高级概念上,这些东西看上去组成了一个典型的应用开发框架,告诉我们开发者,你应当这样去实现你的功能。但实际情况是,根本不是这样。

我们可以将Android核心APIs(core APIs)叫做“系统框架”(system framework),而平台APIs(platform APIs)最主要的功能是定义APP应如何与操作系统交互,与APP内部运行逻辑毫不相关。

个人理解:可以简单地将core APIs看做操作系统内核,而将platform APIs看做我们常说的Android Framework。

这就是说,对于platform APIs,从开发者角度与从操作系统角度看其功能作用经常是不一致的,这很容易让人们在使用中感到困惑。

举例来说,我们来考虑一下操作系统是怎样定义“怎样运行一个APP”的。在一个经典的系统里,最基本的就是要求APP包含一个main方法,里面定义了自己要怎样运行:

int main(…){

//我的APP从这里开始运行

}

个人理解:本文的核心思想就是说明,所谓的四大组件,只是让你的APP告诉操作系统,自己要怎样运行而已,跟怎样设计自己的APP,压根没有关系。传统的应用通过一个main方法,告诉操作系统:“嘿哥们,main方法就是我的入口,请从这个方法开始运行我。”而Android却给了你四个选择,每一个组件都是让操作系统运行你的APP的一种入口。

好了,操作系统要运行你的APP了,于是它调用你的main方法,然后你的应用就开始运行了,你可以做任何你想做的事情,直到你认为自己完成任务为止。请注意,这里要求你定义main方法,并不是要求你去做什么事,或是完成一个叫做main的功能,main方法所有的作用仅仅是提供一个APP运行入口而已。

但是在Android的世界,我们决定,我们不要一个明确的main方法作为APP的入口。因为我们需要让系统对APP怎样运行有更多的控制权。尤其是,我们希望构建一个这样的系统,在该系统中,用户永远不需要考虑开启和停止一个APP,而把这些事交给系统去管理。所以,系统需要知道更多的每个APP的内部运行情况,以便能够在需要的时候,以定义好的方式启动APP,即使该APP当时并不在运行。

个人理解:这个系统所需要了解的每个APP的内部运行情况,其实就是Manifest.xml文件中的内容。

为了达到这一点,我们将一个APP的main方法分解成几种系统可以与之交互的形式。这几种形式就是Activity,BroadcastReceiver,ServiceContentProvider APIs,广大的Android开发者都很熟悉它们。

这些类好像在告诉你,你的APP内部应当怎样工作,但这是一种误解!事实上,这些类只是定义你的APP需要怎样与系统交互(以及系统怎样协调你的APP与其他APP进行交互)。这种与系统的交互一旦开始,系统就不再关心你的APP内部是怎样运行了。

为了更好地说明这一点,让我们简要地看看这些APIs对于Android系统来说到底意味着什么。

Activity


这是一个APP与用户交互的入口。从系统的角度看,系统为Activity提供的关键交互动作是:

  1. 持续跟踪用户当前正在关心的(也就是显示在屏幕上的东西),以确保当前进程保持运行。

个人理解:这里,作者实际上的含义是,当你的应用被系统从Activity启动时,在Activity的start与stop状态之间,系统会确保这个Activity始终占据着设备的屏幕,并且确保你的应用绝不会被系统杀死。这是你从Activity启动自己的APP时,系统给予你的APP的一种承诺(just a promise)。

  1. 知道那些之前使用过的进程,这些进程包含着用户可能会返回获取的东西(stopped activities),并因此给予这些进程更高的优先级。

  2. 帮助应用处理进程被杀死的情况,以便用户能够返回到之前的activities,并且这些activities能够加载自己之前的状态

个人理解:很显然,系统所承诺的这种状态恢复能力,是依靠ActivityonSaveInstanceStateonRestoreInstanceState方法,也就是说,你在Save方法中保存好你想在进程被杀死时想要保存的Activity状态,然后你就可以在Restore方法中获取这些状态以恢复Activity。当你把这些做完后,剩下的就是系统的事情了,系统会承诺,如果由于内存压力杀死了你的Activity所在的进程,那么当你返回时,系统会重建你的应用进程,并帮助你恢复之前Activity的状态。

  1. 提供一种在不同应用之间的用户流(user flow)的方式,当然这要靠系统来协调。最经典的例子就是分享功能的实现。

对于Activity来说,系统并不关心的是:

一旦系统从Activity入口进入到你的APP UI之中,系统将不再关心Activity内部逻辑的组织。你可以将所有的应用逻辑全放入这一个Activity中,比如你可以手动地改变它的views,使用fragments或者其他框架,你也可以把你的应用逻辑分拆成额外的内部activities。你也可以三者同时使用(指的是改变views,使用fragemnts,分拆成额外的activities)。这些事情系统是毫不关心的,只要你遵循Activity与系统之间的约定(在适当的状态下启动它,正确地保存/恢复它的状态)。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

尾声

在我的博客上很多朋友都在给我留言,需要一些系统的面试高频题目。之前说过我的复习范围无非是个人技术博客还有整理的笔记,考虑到笔记是手写版不利于保存,所以打算重新整理并放到网上,时间原因这里先列出面试问题,题解详见:


展示学习笔记

[外链图片转存中…(img-Q0YMckA8-1711620810636)]
展示学习笔记
[外链图片转存中…(img-FG6Eypqk-1711620810636)]
[外链图片转存中…(img-DAg0TdTb-1711620810636)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值