Android应用框架中的四个核心要点:活动(Activity)、消息(Intent)、视图(View)、任务(Task)

(一)活动Activity

Android系统内部有专门的Activity堆栈空间,用于存储多个Activity的运行状态。一般,系统会保证某一时刻只有最顶端的那个Activity是处于前端的活动(foreground)状态。当一个Activity启动并进入活动状态,调用顺序是onCreate、onStrat、onResume;退居后台的时候,调用顺序是onPause、onStop;重新回到活动状态的时候,调用顺序是onRestart、onStart、onResume;销毁过程中调用顺序是onPause、onStop、onDestroy。

所有的Activity必须在项目基础配置文件AndroidManifest.xml中声明,这样Activity才可以被Android应用框架所识别;如果不进行声明,运行时会抛出ActivityNotFoundException异常。

(二)消息Intent

在Android应用系统中,常常把Intent称为消息,实际上,Intent本身是一个对象,里面包含的是构成消息的内容和属性。主要有的属性为:

1、组件名称(ComponentName)

对Android系统来说,组件名称实际是一个ComponentName对象,用于指定Intent对应的目标组件,Intent对象可以通过setComponent、setClassName方法来进行设置。

2、动作(Action)

消息基类(Intent)中定义的动作常量(字符串常量),比较常见的有:

ACTION_MAIN(对应字符串android.intent.action.Main)表示应用的入口的初始化动作。

ACTION_EDIT(对应字符串android.intent.action.EDIT)表示常见的编辑动作。

ACTION_CALL(对应字符串android.intent.action.CALL)表示用于初始化电话模块动作。

Intent对象常使用setAction方法来设置。

3、数据(Data)

不同的动作对应不同的数据(Data)类型,比如

ACTION_EDIT动作可能对应的是用于编辑文档的URI;

ACTION_CALL动作则应该包含类似于tel:xxx的URI。

多数情况下,数据类型可以从URI的格式中获取,Intent也支持使用setData、setType方法来指定数据的URI以及数据类型。

4、类别(Category)

不同的动作由不同类别的Activity组件来处理,比如

CATEGORY_BROWSABLE,表示该Intent应该由浏览器组件来打开

CATEGORY_LAUNCHER,表示此Intent由应用初始化Activity来处理

CATEGORY_PREFERENCE,表示处理该Intent的应该是系统配置界面

消息对象(Intent)可以使用addCategory添加一种类型,而一个Intent对象也可以包含多种类型属性。

5、附加信息(Extras)

存储一些自定义的额外附加信息,一般来说,这些信息是使用键值对的方式存储的。可以使用putExtra方法设置附加信息,信息类型非常丰富(一般还是以字符串为主),在接受的时候使用getExtras方法获取。

6、标志(Flags)

标志用于指示Android系统如何去启动Activity以及启动之后如何处理。

(三)视图 View

视图(View)主管Android应用的界面外观显示,因此也称为Android UI系统,是Android应用框架中最重要的组成部分之一。在Activity中展示或者操作的几乎多有控件都属于View。

主要UI控件:

Button——普通按钮

CheckBox——多选框控件

EditText——编辑框控件

Gallery——图片集控件

GridView——格子显示控件

ImageButton——图片按钮

ImageView——图片控件

LinearLayout——线性布局

ListPopupWindow——弹出式多选框

ListView——列表控件

PopupMenu——弹出菜单

PopupWindow——弹出窗口

ProgressBar——进度条控件

RadioButton——单选框控件

RelativeLayout——绝对定位布局

ScrollView——滚动式列表

TableLayout——表格布局

TextView——文本框

Toast——弹出提示框

(四)任务 Task

任务的概念有点抽象,在日常编码过程中不会直接接触到。

对某个task来说,每次启动一个新的Activity,其都会被压入(push)到Activity堆栈的顶部,而每次按“Back”键,当前的Activity就会被弹出(pop)Activity堆栈。如果,按了“HOME”键,该Task会失去焦点并被保存在内存中,而一旦重新启动,Task会自动读出并显示上次所在的Activity界面。

对于多task来说,当所在的task任务A,运行到某个Activity n的时候,按了“HOME”键,则task A中的所有Activity都被停止了,同时task A暂时退居到后台。这是如果运行Task B,那么task B就被推到前台,并显示最上册的Activity。

另外,我们可以在Android基础配置文件(ManifestFile)中使用<Activity/>元素的launchMode属性来控制Activity在任务中的行为特征。launchMode有四种模式可以选择:

1、Standard模式:Standard模式为默认模式,无论是打开一个新的Activity,还是接受Intent消息,系统都会为这个Activity创建一个新的实例(instance);每个Activity都可以被实例化多次,并且每个任务否可以包含多个实例。常用,但最耗费系统资源。

2、singleTop模式:行为和Standard模式下的行为基本相同。如果该Activity正好在运行状态,那么其接收Intent消息就不需要重新创建实例,而是通过该类的onNewIntent()方法来处理接收到的消息。这在一定程度上会减少一些资源浪费。

3、singleTask模式:此模式保证该Activity在任务中只会有一个实例,并且必须存在于该Task的根元素(即栈底)。此模式比较节省资源,手机浏览器使用的就是这种模式。

4、singleInstance模式:和singleTask类似,但该模式保证Activity独占一个task,其他的Activity都不能存在于该任务的Activity堆栈中。当然,Activity接收Intent消息也是通过onNewIntent方法实现的。

通过设置Intent消息的flag标志来主动改变Activity的调用方式,比较常见的flag如下:

FLAG_ACTIVITY_NEW_TASK:在新的Task中启动目标Activity,表现行为和前面提到的singleTask模式下的行为一样。

FLAG_ACTIVITY_SINGLE_TOP:如果目标Activity正好位于堆栈的顶部,则系统不用新建Activity的实例并使用onNewIntent()方法来处理接收到的消息。表现行为和前面提到的singleTop模式下的行为一样。

FLAG_ACTIVITY_CLEAR_TOP:如果目标Activity的运行实例已经存在,使用此方法系统将会清除咪表Activity所处的堆栈上面的所有Activity实例。

转自:https://blog.csdn.net/qq_39419087/article/details/78831772

Android应用框架中的四个核心要点的更多相关文章

  1. Android View框架总结(四)View布局流程之Measure

    View树的measure流程 View的measures时序图 View布局流程之measure measure过程 View的measure过程 ViewGroup的measure过程 Frame ...

  2. 浅谈java中的四个核心概念--思途青岛

    Java已经成为一个庞大而复杂的技术平台,对于开发人员而言,要想更好的掌握Java技术,深入理解底层的技术处理细节必不可少. 现在介绍下java的四个核心概念: 1.Java虚拟机 Java虚拟机的主 ...

  3. Android Multimedia框架总结(四)MediaPlayer中从Java层到C++层类关系及prepare及之后其他过程

    转载请把头部出处链接和尾部二维码一起转载,本文出自:http://blog.csdn.net/hejjunlin/article/details/52420803 前言:在上篇中,分析了MediaPl ...

  4. 将linux和uboot集成到Android编译框架中

    span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }.CodeMirror ...

  5. Android CC框架中,新建组件无法显示布局问题

    出错: 当在创建新的组件时,跳转到新组件成功,但是无法正确显示布局,即获取到布局文件的控件等. 原因: 当在创建新的组件时,默认生成MainActivity以及其布局activity_main.每个组 ...

  6. Android Multimedia框架总结(七)C++中MediaPlayer的C/S架构补充及MediaService介绍

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼,文章链接: http://blog.csdn.net/hejjunlin/article/details/52465168 前面一篇主要介绍 ...

  7. Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构

    转载请把头部出处链接和尾部二维码一起转载,本文出自: http://blog.csdn.net/hejjunlin/article/details/52435789 前面几节中,都是通过java层调用 ...

  8. Spring框架中的aop操作之一 及aspectjweaver.jar与aopalliance-1.0.jar下载地址 包含beans 注解context 和aop的约束

    (aspect oriented programming面向切面编程) 首先在原有的jar包: 需Spring压缩包中的四个核心JAR包 beans .context.core 和expression ...

  9. ABP源码分析二十六:核心框架中的一些其他功能

    本文是ABP核心项目源码分析的最后一篇,介绍一些前面遗漏的功能 AbpSession AbpSession: 目前这个和CLR的Session没有什么直接的联系.当然可以自定义的去实现IAbpSess ...

随机推荐

  1. 【Mysql的那些事】数据库之ORM操作

    1:ORM的基础操作(必会) <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <3> get(* ...

  2. 2018-9-30-C#-从零开始写-SharpDx-应用-画三角

    title author date CreateTime categories C# 从零开始写 SharpDx 应用 画三角 lindexi 2018-09-30 18:30:14 +0800 20 ...

  3. RDS MySQL 8.0 语句级并发控制

    RDS MySQL 8.0 语句级并发控制 背景 为了应对突发的数据库请求流量,资源消耗过载的语句访问,SQL 访问模型的变化, 并保持 MySQL 实例持续稳定运行,AliSQL 版本设计了基于语句 ...

  4. Oracle函数——TO_DATE

    TO_DATE 含义:将具有固定格式的字符串类型的数据转化为相对应的Date类型数据,官网解释如下图   使用方法 TO_DATE("需要转换的字符串","日期格式&qu ...

  5. php实现第三方登录

    1. oAuth2.0原理 网站为了方便用户快速的登录系统,都会提供使用知名的第三方平台账号进行快速登录的功能,第三方登录都是基于oAuth2.0标准来实现的.下面详细分析[基于账号密码授权]和[基于 ...

  6. spark.read.csv读取CSV文件 ArrayIndexOutOfBoundsException报错

    通过 spark.read.csv读取CSV文件时,遇到 到 ArrayIndexOutOfBoundsException报错,初步判断是缺少参数导致,放百度看看,没找引起问题相关的参数. 第一个看到 ...

  7. oracle 用TRUNCATE替代DELETE

    当删除表中的记录时,在通常情况下, 回滚段(rollback segments ) 用来存放可以被恢复的信息. 如果你没有COMMIT事务, ORACLE会将数据恢复到删除之前的状态(准确地说是恢复到 ...

  8. 云数据库 MySQL 8.0 重磅发布,更适合企业使用场景的RDS数据库

    点击订阅新品发布会! 新产品.新版本.新技术.新功能.价格调整,评论在下方,下期更新!关注更多内容,了解更多 最新发布 云数据库MySQL 8.0 升级发布会 2019年5月29日15时,阿里云云数据 ...

  9. mongodb Helper

    /// <summary> /// mongoDBHelper访问助手 /// </summary> public class mongoDBHelper { /// < ...

  10. Protobuf c的使用范例

    protobuffer (简称PB) 网上的文章一大堆,随便看看,PB使用起来非常方便.这里主要讲讲Protobuf C(简称PC)的使用 1,代码 https://github.com/protob ...