`
zjutsoft
  • 浏览: 460389 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

android Activity 应用程序 生命周期

阅读更多
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课程第一次实验报告_Andorid应用程序Activity生命周期.docx

    本实验报告将深入探讨Android应用程序,尤其是Activity、Service和Intent Receiver的生命周期,并解释如何正确管理这些组件以避免不必要的进程销毁。 首先,Android应用通常在独立的Linux进程中运行。当应用需要...

    Android Activity生命周期

    理解 Activity 生命周期是 Android 开发的基础,掌握了 Activity 生命周期,可以更好地开发 Android 应用程序。 在实际开发中,我们可以使用 Log debugging 来追踪 Activity 的生命周期,可以在每个生命周期方法中...

    实验一 第一个Android程序和Activity生命周期.zip

    实验一 第一个Android程序和Activity生命周期。实验要求: 1.用工程向导生成第一个Android程序,并在模拟器上运行 注意在新建应用的选择SDK版本时选API 18 2.熟悉Android应用程序的基本文件结构 3.了解使用开发环境...

    Android Activity ABC页面跳转生命周期变化及activity + fragment生命周期变化

    Activity作为应用程序中的单个屏幕,而Fragment则可以看作是Activity的一部分,可以在多个Activity之间重用。理解它们的生命周期对于创建稳定、高效的应用至关重要。 Activity的生命周期主要分为以下几个关键状态:...

    Android_Activity_生命周期例子

    了解Activity的生命周期至关重要,因为它直接影响到应用程序的性能、内存管理和用户体验。本文将深入探讨Android Activity的生命周期,并通过具体的例子来帮助开发者更好地理解这一核心概念。 Android Activity的...

    android Activity生命周期

    理解Activity的生命周期是至关重要的,因为这直接影响到应用程序的行为和性能。在本篇文章中,我们将深入探讨“Android Activity生命周期”及其相关知识点。 首先,Activity的生命周期包括几个主要状态:初始状态...

    Android Activity生命周期测试程序

    Android Activity是Android应用程序的核心组件之一,它代表了用户与应用交互的界面,比如启动屏幕、主界面等。Activity的生命周期是Android开发中的重要概念,理解并掌握Activity的生命周期对于编写高效、稳定且用户...

    android activity 生命周期详细介绍

    在Android开发过程中,Activity作为四大组件之一,是构成应用程序的基本单元。它负责处理与用户交互相关的界面展示工作。为了更好地理解和掌握Activity的工作机制,本文将详细介绍Android Activity的生命周期及其...

    android的Activity的生命周期

    理解Activity的生命周期至关重要,因为这直接影响到应用程序的行为和性能。本文将详细阐述Android Activity的生命周期及其相关代码实现。 首先,Activity的生命周期可以分为三个主要状态:运行(Running)、暂停...

    测试Android Activity生命周期Demo

    在Android应用开发中,Activity是用户界面的基本组件...此外,了解生命周期对于理解Fragment的生命周期和多Activity应用的管理同样重要,因为它们都遵循类似的规则。因此,这个测试案例是Android开发者的宝贵学习资源。

    android 组件Activity生命周期

    Activity是构成Android应用程序的主要构建块之一,它负责提供用户界面并处理与用户交互相关的事件。Activity的生命周期由一系列回调方法组成,这些方法在特定的事件发生时由系统自动调用。下面将详细解析这些生命...

    android启动以及activity生命周期分析

    在Android开发过程中,理解应用程序如何启动及Activity的生命周期是非常重要的。这不仅有助于我们更好地管理程序的状态,还能帮助我们在遇到内存泄漏等问题时进行快速定位和解决。 #### ActivityThread `...

    Activity和Fragment生命周期研究

    在Android应用开发中,Activity和Fragment是两个至关重要的组件,它们构成了用户界面的主要部分,并各自拥有独特的生命周期。本文将深入探讨Activity和Fragment的生命周期,帮助开发者更好地理解和掌握这两个组件的...

    Activity和Service生命周期及使用AIDL通信实例备份

    本篇将深入探讨Activity和Service的生命周期以及如何利用Android Interface Definition Language (AIDL)进行进程间通信。 Activity是Android应用程序的用户界面,它负责与用户交互。Activity的生命周期分为几个关键...

    Android Activity 生命周期(lifecycle)的研究

    理解它们的生命周期可以帮助开发者更好地优化应用程序,提高用户体验,并避免内存泄漏等问题。 在项目中,Proguard.cfg文件用于配置代码混淆,保护代码安全,减少APK大小;.classpath和.project文件是Eclipse时代的...

    Activity生命周期与启动模式

    在Android应用开发中,Activity是用户界面的主要组件,它与用户进行交互,展现应用程序的各种功能。理解Activity的生命周期和启动模式对于开发高效、稳定的应用至关重要。让我们深入探讨Activity的7大生命周期以及4...

    Android中Activity的生命周期探讨

    在Android应用开发中,Activity是用户界面的基本单元,它的生命周期管理是开发者必须深入理解的关键概念。本文将详细探讨Android中Activity的生命周期,包括其各个状态的转换、主要状态的特性以及如何合理管理这些...

    android activity生命周期实例

    Activity的生命周期是Android开发者必须深入理解的重要概念,因为它直接影响到应用程序的行为和性能。本实例通过切换设备横竖屏来演示Activity的生命周期变化,让我们一起探讨这个话题。 首先,Activity的生命周期...

    android activity 生命周期

    在Android开发中,Activity是构建用户界面的基本单元,它的生命周期是开发者必须深入理解的关键概念。在Android应用程序中,Activity扮演着...通过对生命周期的理解,开发者能够编写出更稳定、高效的Android应用程序。

    Android Activity 生命周期

    Android Activity生命周期是Android应用开发中的核心概念,理解并掌握它对于构建高效、用户友好的应用程序至关重要。Activity作为Android系统中的一个关键组件,代表着用户界面的一个独立屏幕,它有自己的生命周期,...

Global site tag (gtag.js) - Google Analytics