一、基本概念
Activity 负责创建一个窗口,程序员可以通过 setContentView(View)向这个窗口添加一些 UI组件。本文将介绍 Activiy 的生命周期,并且展示一个小程序来验证 Activity 的执行过程。
二、Activity状态
Activity在Android系统中用一个后进先出机制的Activity栈来管理。当新的Activity[A]启动时,它就被放在了 Activity 栈的顶端,而进入运行状态,而先前运行的 Activity[B]通常就被放在了Activity 栈里 A 的下面。当 A 退出运行而从 Activity 栈顶出栈之后,B 就成了 Activty 栈的最上面的 Activity,可再次进入前台运行状态。
在 android 中,Activity 拥有四种基本状态:
< 1>Active/Runing 一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。并且获得了用户的输入焦点。
< 2>Paused 当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。但当系统处于极低内存的情况下,仍然可以杀死这个 Activity。
<3>Stoped 如果它完全被另一个 Activity 覆盖是,它处于停止状态。它仍然保留所有的状态和成员信息。然而它不在为用户可见,所以它的窗口将被隐藏。如果其它地方需要内存,则系统经常会杀死这个 Activity。
<4>Killed Activity 被系统杀死回收或者没有被启动时处于 Killed 状态。
三、生命周期转换图
下图是官方给出的 Activity 状态转换图:
下面就对这张图的几个转换点做出介绍:
< 1>ActivityLaunched -> OnCreate -> OnStart -> OnResume -> ActivityRunning 当系统载入 Activity 时会执行以上步骤。
< 2>ActivityRunning -> OnPause 当前 Activity 失去用户焦点,并且整个 Activity 没有完全隐藏时会执行以上步骤
< 3> OnPause -> OnResume -> ActivityRunning 当 Activity 重新获得用户焦点时,会执行以上步骤。如按下返回键。
< 4> OnPause -> OnStop 当 Activity 被其他 Activity 完全遮挡时会执行以上步骤。如按下 Home 键。
< 5>OnStop -> OnRestart -> OnStart -> OnResume -> ActivityRunning 当被完全遮挡的 Activity 重新获得用户焦点时,会执行以上步骤。
< 6> ActivityRunning –> onPause() -> onStop() -> onDestroy() –> ActivityShutDown
当 Activity 完全停掉并且被销毁时会执行以上步骤,这时 Activity 会消失。比如,当 Activity正在运行时,按返回键,该 Activity 就会被执行这个过程。
<7>OnPause -> AppProgressKilled -> OnCreate 或者 OnStop-> AppProgressKilled -> OnCreate
当系统内存不够时,会执行以上步骤,杀死 OnPause 或者 OnStop 的 Activity,并把内存给其
他程序,而用户想要返回 Activity 时,系统会重新加载此内存。
四、控制 Activity
应用开发者如果想控制Activity,就需要在Activity状态转换的各个时间点上做出自己的实现,也就是重写 Activity 的几种方法。
protected void onCreate(Bundle savedInstanceState);
protected void onStart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy();
五、编程检验以上说法的正确性
下面通过一个简单的程序来验证以上说法的正确性:
package com.activity;
import android.app.Activity;
import android.os.Bundle;
public class ActivityLifeActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
System.out.println("on Create");
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
System.out.println("on Destory");
super.onDestroy();
}
@Override
protected void onPause() {
System.out.println("on Pause");
// TODO Auto-generated method stub
super.onPause();
}
@Override
protected void onRestart() {
System.out.println("on Restart");
// TODO Auto-generated method stub
super.onRestart();
}
@Override
protected void onResume() {
System.out.println("on Resume");
// TODO Auto-generated method stub
super.onResume();
}
@Override
protected void onStart() {
System.out.println("on start");
// TODO Auto-generated method stub
super.onStart();
}
@Override
protected void onStop() {
System.out.println("on Stop");
// TODO Auto-generated method stub
super.onStop();
}
}
此程序重写了上述的七种方法。并且每个方法里面都有一条特定的输出语句。
当我们运行程序后程序截图如下:
而系统日志里面的输出信息如下:
显然程序已经调用了 OnCreate,OnStart,OnResume 三种方法 再按下 Home 键后程序日志的输出结果:
上图中程序运行了 OnPause 和 OnStop 两种方法。说明按下 Home 键时 Activity 被全部覆盖后,执行了 OnPause 和 OnStop。 重新运行程序的结果:
上图显示程序执行了 OnRestart,OnStart,OnResume 三种方法。说明当一个被覆盖的 Activity重新获得焦点之后会执行以上函数。 按下返回键的日志输出结果:
程序运行了 OnPause,OnStop 和 OnDestory。按下返回键程序退出。而系统会将 Activity 从整个 Activity 栈的顶部 pop 出。这个 Activity 就会被销毁。所以会执行上述步骤。
六、参考文章:
http://developer.android.com/reference/android/app/Activity.html
http://blog.csdn.net/android_tutor/article/details/5772285
http://blog.csdn.net/thl789/article/details/6628463
相关推荐
一个详细图解形式描述的android系统里面的activity activity是android显示系统的幕后操作者
黑马安卓基础 总共8天教程。有文档,用到的工具软件,jar包,笔记,图解,源码+注释。视频太大放不上来。以下为今日教学内容,仅供参考。 46_多线程下载文件的原理.avi ...55_切换屏幕activity生命周期的处理.avi
1.图解Activity生命周期: 2.七个方法的含义 一、 onCreate :当活动第一次启动的时候,触发该方法,可以在此时完成活动的初始化工作。 二、 onStart :该方法的触发表示所属活动将被展现给用户,可视化。 三、 ...
"Activity Group"是一种非标准但实用的方法,它允许我们将多个Activity组织在一个“容器”Activity内,从而更好地控制它们的生命周期和导航。在给定的描述中,提到通过自定义一个抽象类继承自ActivityGroup,这正是...
- Activity生命周期图解:详解各个回调方法的作用及其调用顺序。 - onSaveInstanceState() 和 onRestoreInstanceState() 方法的应用场景分析。 - 活动之间数据传递机制:Intent传值、Bundle封装数据等。 #### 五...
`ActivityLifeCircle`这个文件很可能包含了关于`Activity`生命周期的示例代码、图解或其他教学材料,帮助开发者更直观地理解和掌握这一核心概念。通过实践和学习这些资源,开发者可以更好地管理`Activity`的状态,...
Activity有多种生命周期状态,如运行、暂停、停止和销毁,开发者必须理解这些状态以确保应用正确运行。 2. **Service**:Service是在后台运行的组件,不提供用户界面。它可以长时间执行任务,即使用户已经离开了...
`fragment生命周期png.png`和`activity生命周期png.png`可能包含了这两个关键组件的生命周期图解。Fragment是Android中的一个可重用的UI组件,它可以在Activity中独立存在或者作为Activity的一部分。Activity是...
官方提供的生命周期图解可以帮助开发者理解各个方法(如onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy())何时被触发。此外,当设备屏幕旋转时,Activity会重新创建,此时需要通过...
- "服务的生命周期.png"可能是Service生命周期各个阶段的可视化表示。 - "Serviced的种类.png"可能区分了标准Service和IntentService的特点。 7. **源代码分析**: "Service1"可能是博客中提到的一个具体Service...
这些图表不仅有助于设计阶段的工作,还能在整个项目的生命周期中提供持续的支持。无论是初学者还是经验丰富的开发人员,StarUML 都是一款非常有用的工具,可以帮助他们有效地进行软件设计和分析。通过对这些图表的...
- Activity Manager:管理Activity的生命周期,启动、暂停、恢复等操作都基于Binder。 - Service:远程服务的实现,如音乐播放服务、下载服务等。 - AIDL(Android Interface Definition Language):用于定义跨...
6. **Activity 生命周期管理**:在 Activity 的生命周期中正确管理位图资源至关重要,避免在 Activity 暂停或销毁时还持有位图引用,导致内存泄漏。 7. **使用硬件加速**:Android 提供了硬件加速机制,通过 GPU ...
6. **状态图(State Diagram)**:描述一个对象在其生命周期内可能经历的各种状态以及状态之间的转换。 7. **活动图(Activity Diagram)**:类似流程图,用来表示工作流或控制流,常用于业务流程建模。 8. **组件...
开发者可以通过这些服务来实现应用的生命周期管理、数据共享、组件间通信等功能。 6. **应用程序**:Android系统预装了一系列Google提供的核心应用,如Dialer(拨号器)、Contacts(联系人)、Calendar(日历)、...
如果Activity的`onTouchEvent`也未处理,事件生命周期结束。 三、核心代码示例 以下是一个简单的Activity中触摸事件处理的代码示例: ```java public class MainActivity extends Activity { @Override ...
这个"android 快速入门 视频截图"资源中的图片很可能展示了这些概念的可视化示例,例如Android Studio的界面、XML布局设计、生命周期图解等。通过这些截图,初学者能直观地了解各个概念,快速上手实践。结合视频教程...
- **状态图(State Diagram)**:表示对象在其生命周期中的不同状态以及转换过程。 - **活动图(Activity Diagram)**:流程图的形式,展示系统内任务或动作的流程,类似于流程图或泳道图。 - **组件图...
- **Activity生命周期:** Activity是Android应用程序的核心组件之一,理解它的生命周期对于正确编写用户界面至关重要。 - **状态保存与恢复:** 在不同状态下(如旋转屏幕、内存不足等情况),Activity如何保存和...
Service的生命周期包括onCreate(), onStartCommand(), onBind(), onUnbind() 和 onDestroy() 方法。 3. 数据库(Database): Android默认使用SQLite作为轻量级数据库,它是一个关系型数据库,支持SQL语法,适合于...