• 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

  • 相关阅读:
    负反馈
    阻抗匹配
    音频功放电路
    ##Springboot框架的简单分享,让你入门不是难事
    ##如何用安全框架去实现登陆功能?(包含去实现用户名的实现)
    ##如果你的JVM的小红小绿提示你需要更新怎么办?下面来教你一下子解决
    ##如果我们要用分布式做项目,那么需要安装一个zookeeper,下面给大家简单分享下安装步骤
    ##ENGINE=MYISAM AUTO_INCREMENT=30 DEFAULT CHARSET=utf8
    ##SSM框架整合(Spring框架/Spring MVC框架/Mbatis框架)
    ##SSM框架整合中web.xml配置文件
  • 原文地址:https://www.cnblogs.com/pingxin/p/p00117.html
Copyright © 2020-2023  润新知