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 ...
随机推荐
- JAVA中this的三种用法的详解
this关键字必须放在非静态方法里面 this关键字代表自身,在程序中主要的使用用途有以下几个方面: ? 使用this关键字引用成员变量 ? 使用this关键字在自身构造方法内部引用其它构造方法 ? ...
- Libevent:9Evbuffers缓存IO的实用功能
Libevent的evbuffer功能实现了一个字节队列,优化了在队列尾端增加数据,以及从队列前端删除数据的操作. Evbuffer用来实现缓存网络IO中的缓存部分.它们不能用来在条件发生时调度IO或 ...
- css字体大小单位
1:px: 这个应该是国内使用较多的单位,意思为像素.因此,其视觉的呈现效果是与分辨率相关的.例如在1024*768分辨率下看12px的字体就比960*640下看到的“小”,其实字体像素未改变,所以觉 ...
- Ubuntu+Apache+PHP+Mysql环境搭建(完整版)(转)
http://www.2cto.com/os/201505/401588.html Ubuntu+Apache+PHP+Mysql环境搭建(完整版) 一.操作系统Ubuntu 14.04 64位,阿里 ...
- Python基础:19类和实例的内建函数
1:issubclass() issubclass()布尔函数,判断一个类是否是另一个类的子类或子孙类.它有如下语法:issubclass(sub,sup) 这个函数也允许“不严格”的子类,意味着,一 ...
- @atcoder - AGC037F@ Counting of Subarrays
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定 L,连续至少 L 个相同的数 k 可以合并成 1 个 k+ ...
- @topcoder - 2017TCOAlgorithmRound2A - D1L2@ DistanceZeroAndOne
目录 @description@ @solution@ @accepted code@ @details@ @description@ 一个 n 个点的无向简单的连通图,编号从 0 到 n-1. 现给 ...
- day5-python之面向过程编程
一.面向过程编程 #1.首先强调:面向过程编程绝对不是用函数编程这么简单,面向过程是一种编程思路.思想,而编程思路是不依赖于具体的语言或语法的.言外之意是即使我们不依赖于函数,也可以基于面向过程的思想 ...
- Java中的Runnable、Callable、Future、FutureTask的区别与示例
Java中存在Runnable.Callable.Future.FutureTask这几个与线程相关的类或者接口,在Java中也是比较重要的几个概念,我们通过下面的简单示例来了解一下它们的作用于区别. ...
- @hdu - 6594@ Double Tree
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定两棵 N 个点的树,以及树上每条边的权值 w(u, v),每 ...