当前位置:K88软件开发文章中心编程语言APP编程Android01 → 文章内容

第十三章 Activity与生命周期

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-23 11:14:04

由 suxinglrzzw 创建, 最后一次修改 2016-02-24 第十三章 Activity与生命周期Activity生命周期并不仅仅在用户运行应用程序之后才开始生效,事实上它也影响着用户切出以及切回应用时得到的不同反馈。当我们开发一款应用时,首先需要牢记一点:用户会经常在执行过程中、在我们的应用与其它应用之间频繁切换。取决于用户的操作方式,同一款应用程序有时在前台运行、有时则在后台运行。大家必须保证自己的应用能够就会这类情况,并在此类切换过程中及时保存并恢复数据。再次提醒各位,这一过程对于某些特定应用程序略有不同——例如功能性组件。1. 回调方法第一步为了控制Activity处于不同状态下时应用程序的运行方式,例如当用户切出或者切回应用,大家可以选择多种处理方法。这类方法也就是 Activity生命周期回调方法。Android系统会在我们的Activity进入某种特定状态后调用这些方法,从而通过一系列步骤确保我们的应用程 序能够继续起效、不至于丢失数据而且在用户不与之交互时不会使用非必要性资源。每一种回调方法都会让我们的应用进入一种可能的状态。如果大家之前曾经接触过Java应用程序的编程工作,那么应该已经发现Android应用程序的启动遵循另一种方式。与Java应用直接使用主方法 不同,Android在启动后会首先执行主Activity类中的onCreate方法。请记住,我们已经在清单中将该类指定为主启动Activity。 Activity会首先回调onCreate方法,相当于重复用户启动应用程序后的流程。这时候onCreate方法会使应用程序进入Created状态。开发者指南当中通过示意图以直观方式介绍了生命周期、回调方法以及状态的概念。其中onResume方法负责提供Resumed状态,这时我们的应 用程序可以接受用户的直接操作。其它各类回调方法都以onResume为核心,即将应用程序引导至Resumed状态或者从该状态脱离、启动该状态或者将其停止。对于大部分应用程序来说,我们只需要使用一部分回调方法,但最起码要用到onCreate。虽然使用频率不高,但了解全部回调及状态的作用将帮助我 们了解自己的应用程序在运行及停止运行时,Android系统会受到怎样的影响。一般情况下,大家需要保证用户能够在任何操作过程切换出去之后、都能顺利 恢复到之前的运行状态;如果他们通过导航选择前进或者后退,应用则需保存全部必要数据并释放不必要占用的硬件资源。第二步我们的应用程序可能处于以下五种状态,分别为:Created、Started、Resumed、Paused以及Stopped。另有七种回调方 法能够让应用进入或者脱离上述状态,它们分别是:onCreate、onStart、onRestart、onResume、onPause、 onStop以及onDestroy。这些方法能够让我们的应用程序在可能的状态之间进行切换,而且某些情况下切换速度会很快。通常来说,大家可以认为自 己的应用程序始终处于resumed、paused或者stopped这三种状态之下,因为其它状态都是暂时性的。当我们的应用程序正处于运行当中且用户与之进行操作交互,这时的应用状态为Resumed;当另一个Activity处于前台但仅仅使我们的应用被 部分隐藏时,这时的应用状态为Paused——在这种状态下用户无法再与应用进行交互。当我们的应用完全处于后台之下,而且用户既无法操作、也无法观看到 它时,其状态即为Stopped。在这种状态下Activity会保留之前的所有数据,但无法加以执行。2. 进入Resumed状态如我们所知,主Activity会在应用程序启动时开始运行,onCreate方法也将执行、从而让我们准备该类所需要的Activity UI以及全部数据条目。我们创建的大部分应用当中都包含不只一个Activity,其它Activity会在用户与应用程序进行操作交互时启动。大家可以 利用以下代码通过Intent类启动另一个非主Activity:Intent aboutIntent = new Intent(this, About.class);startActivity(aboutIntent);这代表着应用程序包中另一个名为“About”的Activity类。大家可以通过选择自己的源码包而后选择“文件”、“新建”、“类”的方式在 Eclipse当中创建一个新Activity,而后将该Android Activity类选定为超级类。请记住,每一个Activity都必须在我们的应用程序清单当中列出。大家还可以利用Intent类实现不同 Activity之间的数据转移。当一个Activity处于运行当中时,onCreate方法也在同时执行,因此除了把其它Activity类列入清单之外、大家也能够以与主 Activity类似的方式在应用程序当中处理这些类。我们也可以为每个Activity创建一个布局文件,并通过设置让其使用与主Activity同样 的技术机制。在某个Activity的onCreate方法开始执行之后,onStart与onResume两个方法也将开始执行, 从而使该Activity处于Resumed状态、并在后续执行过程中根据情况转换为Created以及Started状态。我们的Activity可以通过不只一种方式进入Resumed状态,应用程序启动只是其中最基本的途径。如果Activity处于Paused或 者Stopped状态,则应用程序切换至当前之后该Activity将直接进入前台运行模式,且无需重复调用onCreate方法。如果大家的应用从 Paused状态切换回Resumed状态,则Activity的onResume方法将开始执行。如果该应用由Stopped状态切换回运行状态,则执 行onRestart方法、而后依次为onStart与onResume方法。3.进入Destroyed状态第一步当我们的应用程序处于退出或者隐藏状态下,则Resumed就会转变为Destroyed。这时候,onPause方法会将应用的Activity 由运行时的Resumed状态转换为Paused状态。在onPause当中,大家应当停止任何需要占用资源的任务,例如动画播放、传感器数据处理以及广 播接收等等。如果onPause正在执行,那么onStop也可以开始执行,因为用户此时通常已经通过导航退出了我们的应用程序。大家还可以利用 onPause方法进行数据保存——虽然通常来说数据保存工作由onStop方法来负责最为妥当。正如我们之前曾经提到,大家的Activity能够通过onResume方法从Paused状态重新回归至Resumed状态。这意味着我们可以利 用onResume来恢复任何我们之前在onPause当中停止或者发布过的内容。不过大家还需要记住一点,onResume在其它情况下也会付诸执行, 例如在应用程序启动时。第二步在onPause之后,如果应用程序进入Stopped状态,那么onStop也将开始执行。在这种情况下,onRestart、o

[1] [2]  下一页


第十三章 Activity与生命周期