2019-05-30

Android四大组件之Activity闲聊(一)

一. Activity是什么
简单的理解,平时开发过程中展现在用户面前的界面就是Activity,相比单纯的界面,Activity还承载了一系列事件集合以配合用户完成交互工作。
一个普通的界面组织架构如下:


层次关系.png
运行界面.png

层级关系上,Activity、Window、DecorView以及ContentView是依次包含的关系。在这里,我们暂且不讨论Android中对它们的具体实现,先屡清楚每个角色的作用。
在界面中直接操作的视图控件(View)都是最终添加到DecorView容器中的,那怎么展示,其实是Window帮忙完成的,关显示出来是不够,最终要完成和用户的交互(比如相应用户的点击事件等),Activity正是赋予了这样的能力。所以说,如果没有Window这个载体,单靠DecorView是显示不出来的;如果没有Acitivity,单靠Window是没有与用户交互的能力的,三者的关系相辅相成,缺一不可。
在刚开始接触Android开发的时候,我们新建的每个Activity的OnCreate方法中都会有这样一段代码:


TitleView_ContentView.png

结合上述的层次结构,容易看出只是设置了DecorView中ContentView部分,那剩下的TitleView呢,我们不需要设置吗?其实在实际开发过程中,我们都会直接在ContentView中自定义title的样式,将系统提供的TitleView隐藏了。
二. 怎么启动一个Activity
Intent(意图)是Android提供给我们实现Activity跳转的类,只要我们将我们的“意图”赋给Intent,系统解析得到这个Intent后将帮我们实现Activity跳转。
Intent启动示意图.png

根据我们的“意图”表达的方式,系统提供了两种实现启动Activity的方式。“意图”明显,我们称为显示启动;“意图”含蓄,我们称为隐式启动。
1.显示启动


显示调用.png

我们在构造Intent对象时,需要向将当前上下文、要启动的Activity、是否需要携带数据等信息都告诉Intent,系统服务解析Intent时能清晰地了解到要启动哪个Activity,本例中想要启动的是SecondActivity。
2.隐式启动
隐式启动.png

由于隐式启动的方式比较含蓄,所以在构造Intent对象时,并没有将要启动的Activity告诉Intent,但是只告诉了有关要启动的Activity有什么特点,这些特点可能不足以形容用户真正想要启动的Activity,但是没关系,系统会列举出当前所有满足该特点的Activity供用户自己选择;如果当前满足的只有一个,将直接启动;如果没有一个Activity满足,将不会执行任何跳转。例子中在创建Intent对象时,只告诉了Intent想启动携带"android.intent.action.ACTION_START"特点的Activity,如果想要启动成功,则需要在AndroidManifest.xml文件中配置好要启动Activity的属性就好,这里以<intent-filter>标签里面内容作为匹配过滤信息,具体里面有哪些参数,这里不再介绍。强调一点,当且仅当<intent-filter>标签里面的所有属性信息都匹配上,才能启动该Activity。
小结:
Activity显然是交互的能力担当,界面的绘制、控件的添加其实都是window层实现。
Android为什么要提供两种Activity启动方式,其实是因为在某些场景下(比如不同的App进程间,组件化项目中),这些场景可能是无法获取到想要启动Activity的类信息,或者我想要启动微信里面的一个界面,但是不知道它是哪个名字。而显示启动时需要我们传入要启动Activity的信息,所以这些情况无法实现。隐式启动就解决了这样的应用场景,我可以在创建Intent的时候不需要写死要启动Activity的具体信息,只需添加一些过滤参数,双方协商好,就能启动目标Activity。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转自 Android.mk 文件语法详解 ====================================...
    Fakecoder_Sunis阅读 130评论 0 0
  • 验证码机制 在后端里,总是认为前端有可能会被伪造。页面上的验证码是后端随机产生的(也可以前端生成,但不建议) 步骤...
    啊_6424阅读 664评论 0 0
  • 通过微信的扫一扫去下载,会出现白屏的情况,可能是因为安全性的考虑或者其他什么原因,目前已经无法通过微信的扫一扫去下...
    qqa221阅读 163评论 0 0
  • 最好用的录屏软件ApowerREC【最新永久资源免费破解版】网盘下载 录屏工具软件 安装教程 使用教程 破解教程 ...
    业余小王子阅读 133评论 0 0
  • 读书时代有过演讲比赛的机会,都确定我上台,怕自己演讲的不好主动放弃要求换人。工作以后有个关于演讲的比赛,每...
    小米万阅读 147评论 2 1