Android应用框架中的四个核心要点
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应用框架中的四个核心要点的更多相关文章
- Android View框架总结(四)View布局流程之Measure
View树的measure流程 View的measures时序图 View布局流程之measure measure过程 View的measure过程 ViewGroup的measure过程 Frame ...
- 浅谈java中的四个核心概念--思途青岛
Java已经成为一个庞大而复杂的技术平台,对于开发人员而言,要想更好的掌握Java技术,深入理解底层的技术处理细节必不可少. 现在介绍下java的四个核心概念: 1.Java虚拟机 Java虚拟机的主 ...
- Android Multimedia框架总结(四)MediaPlayer中从Java层到C++层类关系及prepare及之后其他过程
转载请把头部出处链接和尾部二维码一起转载,本文出自:http://blog.csdn.net/hejjunlin/article/details/52420803 前言:在上篇中,分析了MediaPl ...
- 将linux和uboot集成到Android编译框架中
span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }.CodeMirror ...
- Android CC框架中,新建组件无法显示布局问题
出错: 当在创建新的组件时,跳转到新组件成功,但是无法正确显示布局,即获取到布局文件的控件等. 原因: 当在创建新的组件时,默认生成MainActivity以及其布局activity_main.每个组 ...
- Android Multimedia框架总结(七)C++中MediaPlayer的C/S架构补充及MediaService介绍
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼,文章链接: http://blog.csdn.net/hejjunlin/article/details/52465168 前面一篇主要介绍 ...
- Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构
转载请把头部出处链接和尾部二维码一起转载,本文出自: http://blog.csdn.net/hejjunlin/article/details/52435789 前面几节中,都是通过java层调用 ...
- Spring框架中的aop操作之一 及aspectjweaver.jar与aopalliance-1.0.jar下载地址 包含beans 注解context 和aop的约束
(aspect oriented programming面向切面编程) 首先在原有的jar包: 需Spring压缩包中的四个核心JAR包 beans .context.core 和expression ...
- ABP源码分析二十六:核心框架中的一些其他功能
本文是ABP核心项目源码分析的最后一篇,介绍一些前面遗漏的功能 AbpSession AbpSession: 目前这个和CLR的Session没有什么直接的联系.当然可以自定义的去实现IAbpSess ...
随机推荐
- windows7蓝屏0x000000c4
故障还原: 360更新弹出更新提示,于是选择了关机自动更新,第二天开机发现电脑蓝屏报0x000000c4错误! 故障排查: 1.无法从最后一次正确配置启动windows7 2.无法进入安全模式 该错误 ...
- 3DSMAX安装失败怎样卸载重新安装3DSMAX,解决3DSMAX安装失败的方法总结
技术帖:3DSMAX没有按照正确方式卸载,导致3DSMAX安装失败.楼主也查过网上关于如何解决3DSMAX安装失败的一些文章,是说删除几个3DSMAX文件和3DSMAX软件注册表就可以解决3DSMAX ...
- AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle【暴力】
AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle 我要崩溃,当时还以为是需要什么离散化的,原来是暴力,特么五层循环....我自己写怎么都 ...
- ntelliJ IDEA2017 + tomcat 即改即生效 实现热部署
1.点击idea中tomcat设置 2.点击deployment查看Deploy at the server startup 中tomcat每次所运行的包是 xxxx:war 还是其他,如果是xxxx ...
- 1、Ubuntu 16.04 安装.net core
Register the Microsoft key register the product repository Install required dependencies 参考网址:https: ...
- behavior planning——13. implement a cost function in C++
In the previous quizzes, you designed a cost function to choose a lane when trying to reach a goal i ...
- 最新版本的ADT使用问题
昨天把androidsdk和adt更新到最新版本,android sdk r22版本. 更新完后原来的项目打包后出现第三方JAR包找不到,网上搜了半天终于找到问题所在: 新版本多了一个Android ...
- Tensorflow中tf.ConfigProto()详解
参考Tensorflow Machine Leanrning Cookbook tf.ConfigProto()主要的作用是配置tf.Session的运算方式,比如gpu运算或者cpu运算 具体代码如 ...
- Laravel 5.5 将会要求 PHP 7.0+
Laravel 5.5 都要用 PHP7 了呢!你还在用 PHP 5 吗? Laravel 一直是一个精 (sheng) 进 (ji) 不 (hen) 休 (kuai) 的框架.就在前几天,下图这位 ...
- hsqldb使用
1 hsqldb介绍 HyperSQL DataBase 是一个现代的关系数据库管理软件,比较彻底遵从SQL:2008标准和JDBC4规范.支持SQL:2008标准所以的核心特性和很多的可选特性. H ...