`
zjutsoft
  • 浏览: 456046 次
  • 性别: 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

     对于应用开发者来说,理解不同的应用组件(特别是Activity、Service、Intent Receiver)对应用进程的生命周期的影响,这是非常重要的。如果没有正确地使用这些组件,将会导致当应用正在处理重要的工作时,进程却被...

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

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

    android生命周期管理:重置一个Activity

    Android 生命周期管理是 Android 应用程序开发中一个非常重要的概念,涉及到 Activity 的生命周期管理,包括 Activity 的创建、启动、停止、销毁等过程。在 Android 中,Activity 可能会因为不同的原因而被销毁,...

    android下activity生命周期

    android下activity生命周期 生命周期: 回调 描述 onCreate() 这是第一个回调,在活动第一次创建是调用 onStart() 这个回调在活动为用户可见时被调用 onResume() 这个回调在应用程序与用户开始可交互的时候调用 ...

    浅谈Android的Activity运行流程(生命周期)

    浅谈Android的Activity运行流程(生命周期)

    android_Activity生命周期

    android_ctivity生命周期,应用程序组件的简介以及生命周期,会对Andriod的开发最基本的有些深刻的认识

    android-activity-lifecycle-demo:一个Android应用程序,展示何时进行各种活动生命周期回调

    Android生命周期演示展示android活动生命周期的android应用演示。 有两个活动, MainActivity.java和secondActivity.java 。 使用logcat和log类,当两个活动中的每个回调都被调用时,此应用向用户显示。 这两个活动...

    深入Activity的生命周期

    本PDF主要是介绍Activity生命周期,目的是为了更的多的android朋友初学者或者不太深入理解的朋友更加地深入android开发程序中去,并全面介绍Activity生命周期中的细节,理解Activity的生命周期对应用程序开发来说是...

    android activity 生命周期

    1. 最上層(即焦點所在)。 2. 不在最上層,但被上層蓋掉一部份(還有一部份可看到)。...Activity 是我们开发Android应用程序最重要的一个类。这个类的内容比较多,我理解多少 就写多少,希望你喜欢:)

    android 横竖屏切换生命周期

    android activity 执行屏幕横竖屏切换的时候activity声明周期执行的竖屏的时候点击横屏 09-04 15:54:27.675: I/yxd(6708): 应用程序执行了============onPause===方法===>> 09-04 15:54:27.685: I/yxd(6708): 应用...

    Android应用开发试题.pdf

    在这份试题中,我们可以看到 Android 应用开发的多个方面,包括操作系统、虚拟机、Activity、Intent、项目工程结构、视图容器、多线程编程、媒体播放、应用程序生命周期和传感器管理等。这些知识点都是 Android 应用...

    Android应用程序生命周期中的活动与图标

    让应用程序生命周期中的交互方式与您的期望完全一致,并使用图标与操作栏引导用户使用UI导航与其他应用程序功能。如今移动设备的功能已经强大到难以置信,比众多开发人员用来编写首个程序的桌面计算机还要强大得多。...

    四、Android程序生命周期-Android开发与实践

    了解Android系统的进程优先级的变化方式 了解Android系统的四大基本组件 ... 了解Activity的生命周期中各状态的变化关系 掌握Activity事件回调函数的作用和调用顺序 掌握Android应用程序的调试方法和工具

    Android编程之基于Log演示一个activity生命周期实例详解

    主要介绍了Android编程之基于Log演示一个activity生命周期,结合完整实例形式较为详细的分析总结了Log演示activity生命周期的具体用法及Log的具体使用方法,需要的朋友可以参考下

    android-activity-lifecycle:向任何类提供一种侦听android活动生命周期事件的方法

    当您开发具有许多类的真实世界应用程序时,很有可能在活动的生命周期事件发生时需要做一些事情。 例如,在发生“销毁”事件时释放一些资源或从服务中注销。 由于该事件是通过回调通知的,因此它可能导致编写所谓的...

    Android应用开发详解

    Android 基本程序单元Activity,讲述了Android中重要组件Activity的创建、启动和生命周期等内容 第6章 Android组件之间的信使Intent Android 组件之间的信使Intent,讲述了Intent对象及其属性、Intent的实现策略和...

    Android开发指南中文版-----应用程序框架

    Activity生命周期 17 调用父类 18 服务生命周期 21 广播接收器生命周期 22 进程与生命周期 22 用户界面User Interface 24 视图层次View Hierarchy 24 布局Layout 25 部件Widgets 26 用户界面事件UI Events 26 菜单...

    Android开发应用实战详解源代码

    2.4 程序生命周期 2.4.1 android周期 2.4.2 android进程 2.5 activity的生命周期 2.5.1 activity状态 2.5.2 剖析activity 2.6 android进程和线程 2.6.1 进程 2.6.2 线程 2.6.3 远程调用(remote procedure calls) ...

    ANDROID应用开发试题.pdf

    12. android 中下列属于 Intent 的作用的是 ()CA 实现应用程序间的数据共享B 是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失C 可以实现界面间的切换,可以包含动作和...

Global site tag (gtag.js) - Google Analytics