一、Android活动

活动是 Android 应用框架中的一个核心组件,它在一个窗口(Window)对象中绘制用户接口并响应用户的交互。

Android四大核心组件分别为Activity(活动)、Service(服务)、Content provider(数据源)、Broadcastreceiver(广播接收器)。

官方文档是这么定义的:“An Activity isan application component that provides a screen with which users can interactin order to do something, such as dial the phone, take a photo, send an email,or view a map.”大概意思是说,Activity是一个可以让屏幕提供用户交互动作的组件,比如打电话、照相、发送邮件和查看地图等。简单来说,我们在应用程序中能看到的内容,绝大多数都是Activity组件提供的。

一个应用中通常包含多个活动,用户在不同的活动中执行不同的操作,但只有一个处于“活跃”状态:启动一个新的活动,前一个就会停止并被压入一个栈中。

一个Activity通常就是一个单独的屏幕(窗口)。主要做的事情就是:绘制用户接口、响应用户交互。一个Android程序可有多个活动组成,多个活动通过Intent进行通信。

Android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。

Activity活动的类图:

由上图可以看出,活动Activity这个类的直接父类是ContextThemeWarpper,图中Activity类指出去的虚线箭头都是Activity类所实现的接口。活动(Activity)是上下文(Context)的子类型,实现了窗口、键盘事件的的回调,还实现了布局扩展及创建上下文菜单的接口

二、Android活动的创建和使用

1.创建一个Activity

创建一个活动,通常直接继承 Activity类,并在子类中重写一系列的回调方法;

2.声明活动---在manifest中注册Activity

除了要定义和继承Activity之外,我们还需要在manifest中进行注册,表示声明,如果不声明的话,这个Activity在运行时候,会报ANR错误,就是应用程序没有响应。那么怎么声明呢,我们每新建一个项目时候,都会有一个AndroidManifest.xml文件,我们需要在AndroidManifest.xml文件中对我们的Activity进行注册。

可以看到,活动的注册在<application>标签中,这里通过<activity>标签来对活动进行注册的。

Android:name属性来具体注册哪一个活动,在这里我们对我们刚才定义的MainActivity类进行注册,由于在最外层的<manifest>标签中已经通过package属性指定了包名是com.example.helloworld,因此在注册活动时这一部分就可以省略了,当然你可以定义为com.example.helloworld.MainActivity,不过直接使用.MainActivity也就足够了。

Android:label指定活动中的标题栏的内容,标题栏是显示在活动的最顶部的,需要注意的是,给主活动指定的label不仅会成为标题栏的内容,还会成为启动器(Launcher)中应用程序显示的名称。之后在<activity>标签的内容我们加入了<intent-filter>标签,并在这个标签里添加了<actionandroid:name="android.intent.action.MAIN"/>和<category android:name="android.intent.category.LAUNCHER"/>这两句声明。表示在手机上点击应用图标时,首先启动的就是这个活动,如果你的应用程序中没有声明任何一个活动作为主活动,这个程序仍然是可以正常安装的,只是你无法在启动中看到或者打开这个程序。这种没有主活动的应用程序,基本都是用为第三方服务居多,比如支付宝快捷支付服务。

最后再给这个活动增加业务逻辑、事件处理。

三、Android活动生命周期

1、生命周期概述

Android系统是一个多任务(Multi-Task)的操作系统,可以在用手机听音乐的同时,也执行其他多个程序(APP)。每多执行一个应用程序,就会多耗费一些系统内存,当同时执行的程序过多,或是关闭的程序没有正确释放掉内存,系统就会觉得越来越慢,甚至不稳定。

为了解决这个问题, Android 引入了一个新的机制----- 生命周期(Life Cycle)。Android 应用程序的生命周期是由Android 框架进行管理,而不是由应用程序直接控制。通常,每一个应用程序(入口一般会是某一个Activity 的onCreate 方法),都会产生一个进程(Process)。当系统内存即将不足的时候,会依照优先级自动进行进程(Process)的回收。不管是使用者或开发者,都无法确定的应用程序何时会被回收。所以为了很好的防止数据丢失和其他问题,了解生命周期很重要。

2、活动的生命周期-示意图:

图中白色矩形框中的方法,都是跟活动Activity生命周期相关的函数。

onCreate():每个活动中我们都会重写这个方法,它会在活动第一次被创建的时候调用,比如完成一些初始化操作,加载布局、绑定事件等

onStart():这个方法在活动不可见变为可见的时候调用;执行该方法后,活动就显示可见了。

onResume():这个方法在活动准备好和用户进行交互的时候调用,此时的活动一定位于返回栈的栈顶、并且处于运行状态;执行该方法后,活动即获得焦点。

onPause():这个方法在系统准备去启动或者恢复另一个活动的时候调用。我们通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。执行该方法后,失去焦点,不能再进行用户交互。

onStop():这个方法在活动完全不可见的时候调用。它和onPause()方法主要区别在于,如果启动的新活动是一个对话框式的活动,那么onPause()方法会得到执行,而onStop()方法不会执行。执行该方法后,活动不可见,进入“后台”。

onDestroy():这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。

onRestart():这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。

3、生命周期—分类

根据活动的复杂度,也许并不需要实现所有生命周期中的方法,但需要知道每个方法的功能,确保你的应用能像用户期望的那样执行;避免出现以下情况:

不会因为来电话或切换到其他应用而崩溃;

用户离开应用一段时间后返回,不会丢失进度;

用户设备屏幕旋转时,不会丢失进度或崩溃;

GPS 或其他传感器在不需要时不要一直消耗电量;

创建一个活动,通常直接继承 Activity,并在子类中重写一系列的回调方法;在活动状态发生改变时,这些方法由应用框架按照特定的顺序调用,我们称其为活动的生命周期;该周期按照执行的时间顺序可划分为:

1. 完全生命周期

2. 可见生命周期

3. 前台生命周期

1. 完全生命周期

活动在onCreate()和onDestroy()方法之间所经历的。就是上图所描述的顺序执行下来的过程。

2. 可见生命周期

活动在onStart()和onStop()方法之间所经历的。

回调方法

描述

onRestart

活动从隐藏状态进入可见状态

onStart

活动进入可见状态:

初始化 onStop 是释放的资源:如注册广播接收器

onResume

活动到前台,UI获得焦点,进入运行状态

onPause

活动被另一个半透明或对话框(非全屏)的活动遮挡,仍然可见,但失去焦点,不可以操作。

停止动画或正在执行的操作,提交没有保存的改变

onStop

活动到后台,不可见,但依然存活

保存数据(文件或数据库)

注销广播接收器

3. 前台生命周期

也叫交互活动期,活动在onResume()和onPause()方法之间所经历的。

为方便理解,在下图中做了范围对比:

4、保存活动状态

在系统内存不足时,系统会把处于暂停或停止状态的活动销毁;当用户要再次回到已被销毁的活动时,系统会重新创建该活动;此时,会回调以下方法:

onSaveInstanceState(Bundle savedInstanceState)

onRestoreInstanceState(Bundle savedInstanceState)

四、活动的任务栈

在Android中,多个Activity定义在一个Task中,也就是说一个Task是一组Activity的集合,然后Activity又被安排在back stack,即返回栈,是按照后进先出的规则进出栈的。如图:

当从手机中启动一个应用程序图标时,应用程序的Task随之也变成前台进程,如果首次启用时,发现不存在Task实例,那么系统会创建一个Task实例,然后把"main”Activity放入到stack中,默认是栈顶,这样一个Task就管理了一组栈,栈里管理多个Activity。当从Activity1中启动Activity2时,Activity1被推到栈底,Activity2变成栈顶,同理,Activity3进栈的过程和Activity2是一样的,如果我们按back按钮,则Activity3被弹出,系统会根据内存情况进行销售或者回收,Activity2则被推到栈顶,以此类推。当一直按back,返回到主页面,则所有的activitys被全部弹出,则task不复存在。

同时,task有两种状态:Foreground和Background,前景和背景。当处于Background时,所有的activitys是停止的,当处于Foreground时,表示当前用户交互的应用程序。

比如两个应用程序A和B,我们刚开始启动了A应用程序,此时Task A是Foreground,用于与用户交互,当我们点击Home Button时,此时Task A变成Background,里面所有的activitys都是停止的,此时如果我们又启动了B应用程序,Task B又会被实例化,TaskB变成Foreground,不过Task A仍然是Background,一直等待着被恢复。所以是Android也是一个多任务的系统,不同任务是可以被互相切换的。

Android活动生命周期相关推荐

  1. android 活动生命,Android 活动生命周期

    一.活动生命周期的意义 Activity(活动)是一种可以包含用户界面的组件,主要用于与用户进行交互.也就是说,在用户与界面进行交互之前,必须要进行特定的初始化操作.再者,Android 操作系统是一 ...

  2. android生命周期_Android活动生命周期– 7个阶段和功能

    android生命周期 Activity is one of the primary components of an Android application. In this tutorial, w ...

  3. Android Service 生命周期

    Android Service的生命周期 Managing the Lifecycle of a Service service的生命周期,从它被创建开始,到它被销毁为止,可以有两条不同的路径: A ...

  4. android 生命周期管理,Android Activity生命周期和堆栈管理的详解_Android_脚本之家...

    Activity的生命周期 Activity是Android中的四大组件之一,也是最基本,最重要的组件,是android系统提供一个可视化的,能与用户交换的组件. 系统提供的组件,不需要用户实例化,用 ...

  5. Android:Fragment生命周期(结合Activity的生命周期进行分析)

    文章目录 前言 一.Fragment生命周期概述 启动 退出 二.Fragment生命周期细述 1.onCreate(Bundle) 2.onCreateView(LayoutInflater, Vi ...

  6. 4 活动生命周期:活动的一生

    1.活动是所有Android应用的基础 1.1 活动如何工作 1.1.1 应用是一个由活动.布局和其他资源组成的集合. 其中一个活动是应用的主活动. 1.1.2 每个应用都在自己的进程中运行. 每个应 ...

  7. Android Acitivity 生命周期

    Fragment 的生命周期: Android Fragment 生命周期及其API使用(建议使用自定义View替换Fragment) Activity的生命周期: (1)启动Activity:系统会 ...

  8. android fragment 生命周期

    今天,简单讲讲fragment 的生命周期. 其实,对于fragment ,大家都很熟悉.我也经常使用,但是最近做一个功能时,在activity里面调用fragment 的函数,发现变量居然没有初始化 ...

  9. Android:生命周期案例

    在学习Android应用生命周期章节中,书本上写的有点笼统,较难理解.为了理解的更深,写了个程序测试一下. 1.在layout文件夹中建一个dialog_layout.xml <?xml ver ...

最新文章

  1. linux上设置了log4j没有产生日志文件_关于 log4j 升级到 log4j2 的小结
  2. Android Studio的配置问题——Intel HAXM is required to run this AVD,VT-x is disabled in BIOS;
  3. 希尔排序(C++版)
  4. linux基础-1.1USB设备(USB1.0以上)连接使用
  5. SlideringDrawer的使用(抽屉效果)
  6. 几个常用的正则表达式
  7. 计蒜客——数位反转问题(代码+解析)
  8. 个人博客网站文章添加目录导航
  9. 20w7珠led驱动电源电路图_LED串联驱动电路图
  10. web.xml 详解
  11. 基于Spring MVC + Spring + MyBatis的【银行卡系统】
  12. Jieba分词并去停用词
  13. 【unity 保卫星城】--- 开发笔记01(飞机移动)
  14. 部署无鱼工时系统,超详细教程,并成功部署
  15. 研究生毕业后,再重新读个硕士
  16. 2、GIT---时光穿梭机
  17. 从程序员到项目经理(5):程序员加油站 -- 不是人人都懂的学习要点
  18. 7723java世界Ol,你不知道的《世界OL》
  19. 解决电脑搜不到WiFi6无线路由信号问题
  20. crc-itu java实现_JAVA编程心得-JAVA实现CRC-CCITT(XMODEM)算法

热门文章

  1. 2022年河南省高职单招(面试)考试冲刺试题及答案
  2. 微信小程序完整脚本源码-20180624版
  3. python实现成语接龙接到指定成语(一个顶俩的扩展版)
  4. 要为了愉悦和理解而阅读,如果你认为阅读不过是上传一些信息,那么你就会一直觉得它太慢了
  5. 2019第四届团体程序设计天梯赛总结
  6. 撒币啦!撒币啦!百度云10万红包等你拿
  7. 【科普一下】量子密码就是量子通信?
  8. java 耗时 框架_真真香!耗时大半个月收整全套「Java架构进阶pdf」没白费
  9. MySQL基础 (SQLyog)尚硅谷婷姐 学习笔记整理
  10. Gyroscope Larnging 001: Angle Momentum Rotational Inertia