Android 应用程序的生命周期是由Android 框架进行管理,而不是由应用程序直接控
制。
通常,每一个应用程序(入口一般会是一个Activity 的onCreate 方法),都会占据
一个进程(Process)。当系统记忆体即将不足的时候,会依照优先级自动进行行程(process)
的回收。不管是使用者或开发者, 都无法确定的应用程序何时会被回收。
一个Activity 类别除了OnCreate 函式之外,还预先定义了OnPause(暂停行程时的行
为)、OnResume(继续行程时的行为)等等的基本行为,当从一个Activity 切换到另一个
Activity 的时候,原本的Activity 将经过一连串的状态改变。开发者可以在程序中添加
一些各状态相对应的流程,每次Activity 改变状态时,就会执行相对应的流程。
要让使用者有好的使用经验,Activity 需要在各个周期点上负责保管状态、恢复状态、
传送资料等工作。
Activity 的状态
Android 的虚拟机(VM)是使用堆叠(Stack based) 管理。主要有四种状态:
* Active (活动)
* Paused (暂停)
* Stopped (停止)
* Dead (已回收或未启动)
Active (活动)
"Active"状态是使用者启动应用程序或Activity 后,Activity 运行中的状态。
在Android 平台上,同一个时刻只会有一个Activity 处于活动(Active)或运行
(Running)状态。其他的Activity 都处于未启动(Dead)、停止(Stopped)、或是暂停(Pause)
的状态。
Paused (暂停)
"Paused"状态是当Activity 暂时暗下来,退到背景画面的状态。
当我们使用Toast、AlertDialog、或是电话来了时,都会让原本运行的Activity 退
到背景画面。新出现的Toast、AlertDialog 等界面元件盖住了原来的Activity 画面。
Activity 处在"Paused"状态时,使用者无法与原Activity 互动。
Stopped (停止)
Stopped"状态是有其他Activity 正在执行,而这个Activity 已经离开萤幕,不再动
作的状态。
透过长按"Home"钮,可以叫出所有处于"Stopped"状态的应用程序列表。
在"Stopped"状态的Activity,还可以透过"Notification"来唤醒。"Notification"
会在后面章节中解说。
Dead (已回收或未启动)
"Dead"状态是Activity 尚未被启动、已经被手动终止,或已经被系统回收的状态。
要手动终止Activity,可以在程序中呼叫"finish"函式。我们在加入选单一章中已经
提到过了。
如果是被系统回收,可能是因为记忆体不足了,所以系统根据记忆体不足时的回收规则,
将处于"Stopped"状态的Activity 所占用的记忆体回收。
记忆体不足时的行为
记忆体不足时,Dalvak 虚拟机会根据其记忆体回收规则来回收记忆体:
1. 先回收与其他Activity 或Service/Intent Receiver 无关的行程(即优先回收独
立的Activity)
2. 再回收处于"Stopped"状态的其他类型Activity(在背景等待的Activity)。最久
没有使用的Activity 优先回收(比较官方的说法是"根据LRU 演算法..."). 还不够?
回收Service 行程
4. 快不行啦,关掉可见的Activity/行程
5. 关闭当前的Activity
当系统缺记忆体缺到开始"4. 关掉可见的Activity/行程"时,大概我们换机子的时机
也早该到啦!
观察Activity 运作流程
public class Bmi extends Activity {
private static final String TAG = "Bmi";
public void onCreate()
{
super.onCreate(...);
Log.v(TAG,"onCreate");
}
public void onStart()
{
super.onStart();
Log.v(TAG,"onStart");
}
public void onResume()
{
super.onResume();
Log.v(TAG,"onResume");
}
public void onPause()
{
super.onPause();
Log.v(TAG,"onPause");
}
public void onStop()
{
super.onStop();
Log.v(TAG,"onStop");
}
public void onRestart()
{
super.onRestart();
Log.v(TAG,"onReStart");
}
public void onDestroy()
{
super.onDestroy();
Log.v(TAG,"onDestroy");
}
}
上面的七个状态又可以归纳成三组:
1. 资源分配(Create/Destroy)
完整的Activity 生命周期由"Create"状态开始,由"Destroy"状态结束。建立
(Create)时分配资源,销毁(Destroy)时释放资源。
2. 可见与不可见(Start/ReStart/Stop)
当Activity 运行到"Start"状态时,就可以在萤幕上看到这个Activity。相反地,当
Activity 运行到"Stop"状态时,这个Activity 就会从萤幕上消失。
当使用者按下Back 按钮回到上一个Activity 时,会先到Restart 状态,再到一般
的Start 状态。
3. 使用者能否直接存取萤幕(Resume/Pause)
当有个Toast、AlertDialog、简讯、电话等讯息乱入时,原来的Activity 会进入
"Pause"状态,暂时放弃直接存取萤幕的能力,被中断到背景去,将前景交给优先级高的事
件。当这些优先级高的事件处理完后,Activity 就改进入"Resume"状态,此时又直接存取
萤幕。
Activity 运作流程
由实际运行的记录来看,我们可以归纳出所有Android 应用程序都遵循的动作流程:
一般启动
onCreate -> onStart -> onResume
启动一个Activity 的基本流程是:分配资源给这个Activity(Create 状态),然后
将Activity 内容显示到萤幕上(Start 状态)。在一切就绪后,取得萤幕的控制权(Resume
状态),使用者可以开始使用这个程序。
呼叫另一个Activity
onPause(1) -> onCreate(2) -> onStart(2) - onResume(2) -> onStop(1)
这是个先冻结原本的Activity,再交出直接存取萤幕能力(Pause 状态)的过程。直
到Activity 2 完成一般启动流程后,Activity 1 才会被停止。
回原Activity
onPause(2) -> onRestart(1) -> onStart(1) -> onResume(1) -> onStop(2) ->
onDestroy(2)
点Back 按钮可以回到原本的Activity。
退出结束
onPause -> onStop -> onDestroy
如果程序中有直接呼叫"finish"函式来关闭Activity 的话,系统假设我们很确定我们
在做什麽,因此会直接跳过先冻结(Freeze)的阶段,暂停(Pause),停止(Stop),然后销毁
(Destroy)。
回收后再启动
onCreate ->onStart ->onResume
被回收掉的Activity 一旦又重新被呼叫时,会像一般启动一样再次呼叫Activity 的
onCreate 函式。
当我们使用"Android"手机一阵子,在手机上已经执行过多个应用程序。只要按下"Back"
(返回)键,"Android"就会开启最近一次开启过的Activity。
分享到:
相关推荐
本实验报告将深入探讨Android应用程序,尤其是Activity、Service和Intent Receiver的生命周期,并解释如何正确管理这些组件以避免不必要的进程销毁。 首先,Android应用通常在独立的Linux进程中运行。当应用需要...
理解 Activity 生命周期是 Android 开发的基础,掌握了 Activity 生命周期,可以更好地开发 Android 应用程序。 在实际开发中,我们可以使用 Log debugging 来追踪 Activity 的生命周期,可以在每个生命周期方法中...
实验一 第一个Android程序和Activity生命周期。实验要求: 1.用工程向导生成第一个Android程序,并在模拟器上运行 注意在新建应用的选择SDK版本时选API 18 2.熟悉Android应用程序的基本文件结构 3.了解使用开发环境...
Activity作为应用程序中的单个屏幕,而Fragment则可以看作是Activity的一部分,可以在多个Activity之间重用。理解它们的生命周期对于创建稳定、高效的应用至关重要。 Activity的生命周期主要分为以下几个关键状态:...
了解Activity的生命周期至关重要,因为它直接影响到应用程序的性能、内存管理和用户体验。本文将深入探讨Android Activity的生命周期,并通过具体的例子来帮助开发者更好地理解这一核心概念。 Android Activity的...
理解Activity的生命周期是至关重要的,因为这直接影响到应用程序的行为和性能。在本篇文章中,我们将深入探讨“Android Activity生命周期”及其相关知识点。 首先,Activity的生命周期包括几个主要状态:初始状态...
Android Activity是Android应用程序的核心组件之一,它代表了用户与应用交互的界面,比如启动屏幕、主界面等。Activity的生命周期是Android开发中的重要概念,理解并掌握Activity的生命周期对于编写高效、稳定且用户...
在Android开发过程中,Activity作为四大组件之一,是构成应用程序的基本单元。它负责处理与用户交互相关的界面展示工作。为了更好地理解和掌握Activity的工作机制,本文将详细介绍Android Activity的生命周期及其...
理解Activity的生命周期至关重要,因为这直接影响到应用程序的行为和性能。本文将详细阐述Android Activity的生命周期及其相关代码实现。 首先,Activity的生命周期可以分为三个主要状态:运行(Running)、暂停...
在Android应用开发中,Activity是用户界面的基本组件...此外,了解生命周期对于理解Fragment的生命周期和多Activity应用的管理同样重要,因为它们都遵循类似的规则。因此,这个测试案例是Android开发者的宝贵学习资源。
Activity是构成Android应用程序的主要构建块之一,它负责提供用户界面并处理与用户交互相关的事件。Activity的生命周期由一系列回调方法组成,这些方法在特定的事件发生时由系统自动调用。下面将详细解析这些生命...
在Android开发过程中,理解应用程序如何启动及Activity的生命周期是非常重要的。这不仅有助于我们更好地管理程序的状态,还能帮助我们在遇到内存泄漏等问题时进行快速定位和解决。 #### ActivityThread `...
在Android应用开发中,Activity和Fragment是两个至关重要的组件,它们构成了用户界面的主要部分,并各自拥有独特的生命周期。本文将深入探讨Activity和Fragment的生命周期,帮助开发者更好地理解和掌握这两个组件的...
本篇将深入探讨Activity和Service的生命周期以及如何利用Android Interface Definition Language (AIDL)进行进程间通信。 Activity是Android应用程序的用户界面,它负责与用户交互。Activity的生命周期分为几个关键...
理解它们的生命周期可以帮助开发者更好地优化应用程序,提高用户体验,并避免内存泄漏等问题。 在项目中,Proguard.cfg文件用于配置代码混淆,保护代码安全,减少APK大小;.classpath和.project文件是Eclipse时代的...
在Android应用开发中,Activity是用户界面的主要组件,它与用户进行交互,展现应用程序的各种功能。理解Activity的生命周期和启动模式对于开发高效、稳定的应用至关重要。让我们深入探讨Activity的7大生命周期以及4...
在Android应用开发中,Activity是用户界面的基本单元,它的生命周期管理是开发者必须深入理解的关键概念。本文将详细探讨Android中Activity的生命周期,包括其各个状态的转换、主要状态的特性以及如何合理管理这些...
Activity的生命周期是Android开发者必须深入理解的重要概念,因为它直接影响到应用程序的行为和性能。本实例通过切换设备横竖屏来演示Activity的生命周期变化,让我们一起探讨这个话题。 首先,Activity的生命周期...
在Android开发中,Activity是构建用户界面的基本单元,它的生命周期是开发者必须深入理解的关键概念。在Android应用程序中,Activity扮演着...通过对生命周期的理解,开发者能够编写出更稳定、高效的Android应用程序。
Android Activity生命周期是Android应用开发中的核心概念,理解并掌握它对于构建高效、用户友好的应用程序至关重要。Activity作为Android系统中的一个关键组件,代表着用户界面的一个独立屏幕,它有自己的生命周期,...