Activity 的介绍和使用(一)

Activity是什么

Activity是Android的四大组件之一。是用户操作的可视化界面;它为用户提供了一个完成操作指令的窗口。当我们创建完毕Activity之后,需要调用setContentView()方法来完成界面的显示;以此来为用户提供交互的入口。在Android App 中只要能看见的几乎都要依托于Activity,所以Activity是在开发中使用最频繁的一种组件。

Activity的生命周期

在Android中会维持一个Activity Stack(Activity栈),当一个新的Activity创建时,它就会放到栈顶,这个Activity就处于运行状态。当再有一个新的Activity被创建后,会重新压人栈顶,而之前的Activity则会在这个新的Activity底下,就像枪梭压入子弹一样。而且之前的Activity就会进入后台。

一个Activity实质上有四种状态:

  1. 运行中(Running/Active):这时Activity位于栈顶,是可见的,并且可以用户交互。
  2. 暂停(Paused):当Activity失去焦点,不能跟用户交互了,但依然可见,就处于暂停状态。当一个新的非全屏的Activity或者一个透明的Activity放置在栈顶,Activity就处于暂停状态;这个时候Activity的各种数据还被保持着;只有在系统内存在极低的状态下,系统才会自动的去销毁Activity。
  3. 停止(Stoped):当一个Activity被另一个Activity完全覆盖,或者点击HOME键退入了后台,这时候Activity处于停止状态。这里有些是跟暂停状态相似的:这个时候Activity的各种数据还被保持着;当系统的别的地方需要用到内容时,系统会自动的去销毁Activity。
  4. 销毁(Detroyed):当我们点击返回键或者系统在内存不够用的情况下就会把Activity从栈里移除销毁,被系统回收,这时候,Activity处于销毁状态。

上面的四种状态稍微笼统的介绍了一下Activity在不同时期的状态,下面我们通过具体的回调方法看一下Activity的生命周期,下面是官网提供的一张Activity在各个状态下回调用的回调方法:

这张图包含了Activity从被创建到被销毁的几乎所有生命周期的回调函数。从上面的方法名我们就可以猜到其大概的功能。一会我们会细讲。我们上面说到了Activities的四种状态,但是这些方法是在什么状态下调用的呢?下面看图

在Activity运行之前,会通过onCreate(),onStart(),onResume();当运行完onResume()之后,Activity就处于上面说的Running/Active 状态了。

当Activity处于暂停状态时,会调用onPause(),这个时候Activity还是见的。当在这个时候Activity恢复到运行状态时,会重新调用onResume()。

当Activity处理停止状态时,会调用onStop(),这个时候如果要恢复到运行状态就会调用一个新的方法onRestart(),然后去调用onStart(),onResume()。

当Activity被销毁时,就会调用onDestroy(),那么如果要恢复Activity的显示就需要重新创建这个Activity;重新去走onCreate(),onStart(),onResume()这三个方法。

虽然通过字面意思可以大概了解这些方法的作用,但是我们还是需要说一下,它们的具体功能。

onCreate: 当Activity第一次被创建时调用。是生命周期开始的第一个方法。在这里我们可以做一些初始化的操作,比如:调用setContentView()方法去加载界面,绑定布局里的一些控件,初始化一些Activity需要用到的数据。之后会调用onStart方法.

onStart:当Activity正在变为可见时调用。这个时候Activity已经可见了,但是还没有出现在前台还不能跟用户交互。可以简单理解为Actvity已经可见但是还没有出现在前台。之后会调用onResume.

onResume:当Activity可以跟用户交互时调用,这个时候,这个Activity位于栈的顶部。跟onStart相比,它们都是表示Activity已经可见,但是onStart调用时Activity还在后台,而调用onResume时,Activity已经进入了前台,可以跟用户交互了。之后会调用 onPause.

onPause:当Activity暂停时调用这个方法;在这里我们可以用来保存数据,关闭动画和其它比较耗费CPU的操作;但是在这里做的操作绝对不能耗时,因为如果当前Activity要启动一个新的Activity,这个新的Activity会在当前Activity执行完毕onPause之后才能进入可见状态。这个方法之后一般会调用的方法有onStop或者onResume.

注意:在Android3.0之前,调用这个方法之后,Activity可能会在系统内存紧张时被系统回收。

onStop:当Activity进入后台,并且不会被用户看到时调用。当别的Activity出现在前台时,或者Activity会被销毁时,调用此方法;在这个方法调用之后,系统可能会在内存不够的情况下回收Activity;在这个方法之后一般会调用onRestart或者onDestroy.

onDestroy:这个方法是Activity生命周期中调用的最后一个方法。它会在Activity被销毁之前调用;Activity销毁原因一般是我们调用Activity的finish方法手动销毁,另一个就是系统在内存紧张的情况下去销毁Activity,以用来节省空间。我们可以通过方法 isFinishing 来判断Activity是否正在被销毁。

onRestart:这个方法是在Activity处于停止状态后,又回到可视状态时调用。之后会调用onResume.

以上是Activity的生命周期方法,除此之外Activity还有两个方法感觉大家也应该知道,虽然它们不属于Activity的生命周期方法。这俩方法是:onSaveInstanceStateonRestoreInstanceState。,

onSaveInstanceState

它不属于Activity的生命周期方法,不一定会被触发,但是当应用遇到意外情况,比如:内存紧张用户点击了Home键或者用户按下电源键关闭屏幕等这些情况,这时系统可能会去销毁Activity,这时这个方法就会被调用。这里强调的是系统去回收Activity,而不是我们去手动的销毁Activity。这个方法提供了一个Bundle对象,我们可以通过它来保存一些临时性的状态或者数据。通常这个方法只适合保存临时数据,如果需要数据的持久化保存等操作,还是要在onPause方法里执行才好。当 Activity再次被创建时,Activity会通过onCreate(Bundle)或者onRestoreInstanceState(Bundle)执行的时候,会将提供一个的Bundle对象来恢复这些数据。

onRestoreInstanceState

这个方法调用的前提是,Activity必须是被系统销毁了,在Activity被再次创建时它会在onStart()方法之后被调用。

下面总结一下Activity的生命周期:

正常情况下Activity的生命周期是:

onCreate->onStart->onResume->onPause->onStop->onDestroy

  1. 对于一个正常的Activity,第一次启动,会依次回调以下方法:

    onCreate->onStart->onResume

  2. 当我们打开一个新的Activity或者点击Home键回到桌面后,会依次回调以下方法:

    onPause->onStop。

    上面提到过,如果新的Activity是透明的(采用的透明主题),当前的Activity不会回调onStop.

  3. 当我们再次回到原Activity,会依次回调以下方法:

    onRestart->onStart->onResume.

  4. 当我们点击返回键后,会依次回调以下方法:

    onPause->onStop->onDestroy.

  5. 当Activity被系统回收后,再次被打开,会跟第一次启动的时回调生命周期方法一样(不包含 onSaveInstanceState 和 onRestoreInstanceState)。
  6. 我们可以注意到 其中onCreate 跟 onDestroy 是相对的。一个创建一个销毁。并且其只可能被调用一次。按照这种配对方式,我们也可以看出 onStart跟onStop 是配对的,这两个方法可以被多吃调用。onResume 和 onPause 也是配对的,它们一个获取焦点和用户交互,一个正好相反。
  7. onStart和onResume,onPause和onStop,这两对方法在功描述差不多,那为什么还要重复存在呢?
    其实这两对方法分别代表不同的意义,onStart和onStop 是Activity是否可见的标志,而onResume和onPause是从Activity是否位于前台的标志,它们针对的角度不同。
  8. 在onPause里不能做耗时操作,因为如果要启动一个新的Activity,新的Activity必须要在前一个Activity的onPause 方法执行完毕之后才会启动的新的Activity。

上面是正常情况下的生命周期方法调用,下面简单说一下异常情况下Activity的生命周期:

在系统内存不够时会根据优先级杀死Activity。怎么判断Activity的优先级呢?

  1. 最高的优先级:在前台显示并且跟用户交互的Activity,优先级最高,
  2. 暂停状态的Activity优先级次之:如果Activity没有在前台,但是可见,不可与用户交互,比如弹出一个对话框等。
  3. 处于后台Activity优先级最低:执行了onStop方法的Activity优先级最低。它不可见,并且无法跟用户交互。

当系统内存不足,就会按照优先级去销毁Activity,在销毁Activity时会额外的在onPause和onStop之间调用onSaveInstanceState;当要重新创建这个Activity 时,会在onStart方法之后调用onRestoreInstanceState方法。

时间: 2024-11-04 10:18:16

Activity 的介绍和使用(一)的相关文章

android.app.Activity 的介绍

发现当前Android的资料不是很多,而且对于Activity的介绍也很少,所以把官方文档的android.app.Activity的介绍翻译了一下,加入了一些自己的理解.各位如果觉得我自己理解的不对,请无视.欢迎邮件讨论. android.app public class android.app.Activity java.lang.Object android.content.Context android.app.ApplicationContext    ViewInflate.Fact

Android开发学习笔记之四大组件---Activity的介绍,创建以及生命周期

最近重新温习关于android开发的基础知识,还是分享到博客里,一方面分享给有需要的同学,一方面方便自己后期查看 一.什么是Activity 通俗来讲,一屏的界面就是一个Activity,套用比较教科的话,在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应.Activity之间通过Intent进行通信,Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View

【原创】Activity 概念介绍(大全)

[面向人员]:立志于安卓开发的所有人员,做到真正的从零基础起步:[教程说明]:本教程在内容上保证原创.简洁.详细,在附件链接上保证可用.最新.完整:[回帖说明]:教程有不清晰的地方,请及时回帖互动,楼主会第一时间更新帖子,谨以此开源.分享.共进. 1.Activity 是什么? Activity 程序是 Android 程序的基本组成单元,是Android 应用层开发的四大组件之一. 2.Activity 作用是什么? 从通俗角度上来讲:Activity 是用户与 Android 应用程序交互的

MRDS学习三——机械车的改良(Activity的介绍)

Activity:VPL中化繁为简的工具,可以使得真个VPL容易让人看懂,也能跟好的控制.它就很像把一堆比较复杂但相关的流程组合成一个自定义的Activity. 完成Activity的定义: 第一步:复制MRDS学习二的VPL到Diagram中. 第二步:从Basic Activity中拖动一个Activity到Diagram中,右边Properties属性表中修改元件属性如下:(目前只能英文) 第三步:对自定义的 Activity双击进入编辑画面,然后把学习二中的元件复制过来如下: 第四步:(

android设置中的Preferencescreen使用方法介绍与分析

今天主要研究了一下设置中的Preferencescreen应用,它不仅可以作为设置界面显示,并且还可以启动activity,以下主要是对启动activity的介绍 1. Preferencescreen中启动activity 比如wireless_setting.xml中有例如以下片段 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="

android源码解析之(十四)--&gt;Activity启动流程

好吧,终于要开始讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍: An activity represents a single screen with a user interface. For example, an email appl

浅谈Android Activity

Activity是Android中最重要,最常见,也是最基本的组件,下面来详细介绍下Activity. 介绍 一个Acitvity作为一个显示在屏幕上的用户交互界面,比如在电子邮件应用中比如:一个用来显示收件列表的Activity,一个用来写邮件的Activity,一个阅读邮件内容的Activity,等等.Activity用来提供用户体验,许多不同体验的Activity聚集在一起即可以形成一个Android应用程序的用户体验,每一Activity都是相互独立的.应用除了可以访问自己的Activi

二、Android学习第二天——初识Activity(转)

(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第二天——初识Activity 昨天程序搭建成功以后,就可以开发跟运行Android应用程序了,因为Activity是开发中不可或缺的组成部分,所以要对Activity有所认识. 以下两点是需要注意的:(个人总结) 凡是覆写得方法,在方法体中的第一行一定是super.XXX(),一定要先调用父类里的相应方法做必要的事情,再根据自己的需求去写其他的代

android之Activity的生命周期

1.Activity简单介绍: Activity能够简单理解为android手机应用程序中的每个界面. 其有对应的实现Activity类的java类文件(相当于手机界面控制相关逻辑的文件,类似flex页面的脚本文件,或者常见页面形式中的js), 也有响应的布局xml文件,预先设置好响应的布局控件及其大小.颜色等属性. 每个Activity都须要在AndroidManifest.xml文件里注冊,类似于javaweb中servlet,listener须要在web.xml中注冊一样. 2.Activ