`
dss16694
  • 浏览: 148414 次
社区版块
存档分类
最新评论

Android系列教程之四:Activity的生命周期

 
阅读更多

一:Activity的生命周期方法

 Android提供了很多Activity的生命周期方法,比如我们常用的onCreate、onPause、onResume等。这里主要介绍粗粒度的周期方法,诸如onPostCreate、onPostResume等
这些细粒度的周期方法可以参考Android的API文档,在你需要更细层次的控制的时候可以使用这些细粒度的方法。粗粒度的周期方法有以下几个:
onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy(),从名字上就可以看出来这些方法在什么时候执行。

二:测试Activity的生命周期方法的执行顺序

为了能更明白上这几个周期放的执行顺序,我们新建一个HelloWorld项目,在Activity中覆盖这几个方法,打印出日志就可以看出来执行顺序了

  1. 新建HelloWorld项目,详细步骤可以参见:

    Android教程之三:第一个Android应用,HelloWorld

  2. 修改main.xml内容为: 
    Xml代码 复制代码
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:orientation="vertical"  
    4.     android:layout_width="fill_parent"  
    5.     android:layout_height="fill_parent"  
    6.     >  
    7. <TextView     
    8.     android:layout_width="fill_parent"    
    9.     android:layout_height="wrap_content"    
    10.     android:text="第一个Activity"  
    11.     />  
    12. <Button    
    13.     android:id="@+id/second"  
    14.     android:layout_width="wrap_content"  
    15.     android:layout_height="wrap_content"  
    16.     android:text="打开第二个Activity"/>  
    17. </LinearLayout>  
    Xml代码  收藏代码
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:orientation="vertical"  
    4.     android:layout_width="fill_parent"  
    5.     android:layout_height="fill_parent"  
    6.     >  
    7. <TextView    
    8.     android:layout_width="fill_parent"   
    9.     android:layout_height="wrap_content"   
    10.     android:text="第一个Activity"  
    11.     />  
    12. <Button   
    13.     android:id="@+id/second"  
    14.     android:layout_width="wrap_content"  
    15.     android:layout_height="wrap_content"  
    16.     android:text="打开第二个Activity"/>  
    17. </LinearLayout>  
     
    这里主要是为增加一个文本显示和一个按钮用于显示信息和操作。
  3. 新建布局文件second.xml,内容如下:
    Xml代码 复制代码
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout  
    3.   xmlns:android="http://schemas.android.com/apk/res/android"  
    4.   android:orientation="vertical"  
    5.   android:layout_width="fill_parent"  
    6.   android:layout_height="fill_parent">  
    7.   <TextView     
    8.     android:layout_width="fill_parent"    
    9.     android:layout_height="wrap_content"    
    10.     android:text="第二个Activity"  
    11.     />  
    12. <Button    
    13.     android:id="@+id/exit"  
    14.     android:layout_width="wrap_content"  
    15.     android:layout_height="wrap_content"  
    16.     android:text="退出"/>  
    17. </LinearLayout>  
    Xml代码  收藏代码
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout  
    3.   xmlns:android="http://schemas.android.com/apk/res/android"  
    4.   android:orientation="vertical"  
    5.   android:layout_width="fill_parent"  
    6.   android:layout_height="fill_parent">  
    7.   <TextView    
    8.     android:layout_width="fill_parent"   
    9.     android:layout_height="wrap_content"   
    10.     android:text="第二个Activity"  
    11.     />  
    12. <Button   
    13.     android:id="@+id/exit"  
    14.     android:layout_width="wrap_content"  
    15.     android:layout_height="wrap_content"  
    16.     android:text="退出"/>  
    17. </LinearLayout>  
     这里主要是为增加一个文本显示和一个退出按钮用于退出当前Activity。
  4. 新建一个Activity,名字为SecondActivity,内容如下: 
    Java代码 复制代码
    1. public class SecondActivity extends Activity {   
    2.     private final static String TAG="SecondActivity";   
    3.     @Override  
    4.     protected void onCreate(Bundle savedInstanceState) {   
    5.         super.onCreate(savedInstanceState);   
    6.         Log.v(TAG, "onCreate");   
    7.         setContentView(R.layout.second);   
    8.         //退出按钮   
    9.         Button btnExit=(Button)findViewById(R.id.exit);   
    10.         //为退出按钮设置单击事件   
    11.         btnExit.setOnClickListener(new OnClickListener() {   
    12.             @Override  
    13.             public void onClick(View v) {   
    14.                 finish();//关闭当前Activity,也就是退出   
    15.             }   
    16.         });   
    17.     }   
    18.     @Override  
    19.     protected void onStart() {   
    20.         super.onStart();   
    21.         Log.v(TAG, "onStart");   
    22.     }   
    23.     @Override  
    24.     protected void onResume() {   
    25.         super.onResume();   
    26.         Log.v(TAG, "onResume");   
    27.     }   
    28.     @Override  
    29.     protected void onPause() {   
    30.         super.onPause();   
    31.         Log.v(TAG, "onPause");   
    32.     }   
    33.     @Override  
    34.     protected void onStop() {   
    35.         super.onStop();   
    36.         Log.v(TAG, "onStop");   
    37.     }   
    38.     @Override  
    39.     protected void onDestroy() {   
    40.         super.onDestroy();   
    41.         Log.v(TAG, "onDestroy");   
    42.     }   
    43.        
    44. }  
    Java代码  收藏代码
    1. public class SecondActivity extends Activity {  
    2.     private final static String TAG="SecondActivity";  
    3.     @Override  
    4.     protected void onCreate(Bundle savedInstanceState) {  
    5.         super.onCreate(savedInstanceState);  
    6.         Log.v(TAG, "onCreate");  
    7.         setContentView(R.layout.second);  
    8.         //退出按钮  
    9.         Button btnExit=(Button)findViewById(R.id.exit);  
    10.         //为退出按钮设置单击事件  
    11.         btnExit.setOnClickListener(new OnClickListener() {  
    12.             @Override  
    13.             public void onClick(View v) {  
    14.                 finish();//关闭当前Activity,也就是退出  
    15.             }  
    16.         });  
    17.     }  
    18.     @Override  
    19.     protected void onStart() {  
    20.         super.onStart();  
    21.         Log.v(TAG, "onStart");  
    22.     }  
    23.     @Override  
    24.     protected void onResume() {  
    25.         super.onResume();  
    26.         Log.v(TAG, "onResume");  
    27.     }  
    28.     @Override  
    29.     protected void onPause() {  
    30.         super.onPause();  
    31.         Log.v(TAG, "onPause");  
    32.     }  
    33.     @Override  
    34.     protected void onStop() {  
    35.         super.onStop();  
    36.         Log.v(TAG, "onStop");  
    37.     }  
    38.     @Override  
    39.     protected void onDestroy() {  
    40.         super.onDestroy();  
    41.         Log.v(TAG, "onDestroy");  
    42.     }  
    43.       
    44. }  
     我在各个周期方法了都加了日志信息,便于跟踪Activity的运行过程
  5. 修改HelloWorld类,内容如下:
    Java代码 复制代码
    1. public class HelloWorld extends Activity {   
    2.     private final static String TAG="HelloWorld";   
    3.     /** Called when the activity is first created. */  
    4.     @Override  
    5.     public void onCreate(Bundle savedInstanceState) {   
    6.         super.onCreate(savedInstanceState);   
    7.         Log.v(TAG, "onCreate");   
    8.         setContentView(R.layout.main);   
    9.         //打开第二个Activity的按钮   
    10.         Button btnSecond=(Button)findViewById(R.id.second);   
    11.         //设置单击事件   
    12.         btnSecond.setOnClickListener(new OnClickListener() {   
    13.             @Override  
    14.             public void onClick(View v) {   
    15.                 startActivity(new Intent(HelloWorld.this,SecondActivity.class));   
    16.                 finish();//关闭当前Activity   
    17.             }   
    18.         });   
    19.     }   
    20.     @Override  
    21.     protected void onStart() {   
    22.         super.onStart();   
    23.         Log.v(TAG, "onStart");   
    24.     }   
    25.     @Override  
    26.     protected void onResume() {   
    27.         super.onResume();   
    28.         Log.v(TAG, "onResume");   
    29.     }   
    30.     @Override  
    31.     protected void onPause() {   
    32.         super.onPause();   
    33.         Log.v(TAG, "onPause");   
    34.     }   
    35.     @Override  
    36.     protected void onStop() {   
    37.         super.onStop();   
    38.         Log.v(TAG, "onStop");   
    39.     }   
    40.     @Override  
    41.     protected void onDestroy() {   
    42.         super.onDestroy();   
    43.         Log.v(TAG, "onDestroy");   
    44.     }   
    45. }  
    Java代码  收藏代码
    1. public class HelloWorld extends Activity {  
    2.     private final static String TAG="HelloWorld";  
    3.     /** Called when the activity is first created. */  
    4.     @Override  
    5.     public void onCreate(Bundle savedInstanceState) {  
    6.         super.onCreate(savedInstanceState);  
    7.         Log.v(TAG, "onCreate");  
    8.         setContentView(R.layout.main);  
    9.         //打开第二个Activity的按钮  
    10.         Button btnSecond=(Button)findViewById(R.id.second);  
    11.         //设置单击事件  
    12.         btnSecond.setOnClickListener(new OnClickListener() {  
    13.             @Override  
    14.             public void onClick(View v) {  
    15.                 startActivity(new Intent(HelloWorld.this,SecondActivity.class));  
    16.                 finish();//关闭当前Activity  
    17.             }  
    18.         });  
    19.     }  
    20.     @Override  
    21.     protected void onStart() {  
    22.         super.onStart();  
    23.         Log.v(TAG, "onStart");  
    24.     }  
    25.     @Override  
    26.     protected void onResume() {  
    27.         super.onResume();  
    28.         Log.v(TAG, "onResume");  
    29.     }  
    30.     @Override  
    31.     protected void onPause() {  
    32.         super.onPause();  
    33.         Log.v(TAG, "onPause");  
    34.     }  
    35.     @Override  
    36.     protected void onStop() {  
    37.         super.onStop();  
    38.         Log.v(TAG, "onStop");  
    39.     }  
    40.     @Override  
    41.     protected void onDestroy() {  
    42.         super.onDestroy();  
    43.         Log.v(TAG, "onDestroy");  
    44.     }  
    45. }  
  6. 运行程序,分析结果,发现当程序启动的时候,日志信息为下图: 

     由此可见当打开一个Activity的时候,其周期方法执行顺序为:onCreate()->onStart()->onResume(),现在点击“打开第二个Activity”按钮,看日志的输出如下图: 

     当应用从Helloworld这个Activity启动SecondActivity的时候,Android会先执行HelloWorld的onPause方法,然后依次执行SecondActivity的onCreate()->onStart()->onResume()方法
    当SecondActivity呈现到屏幕上的时候再一次执行Helloworld的onStop()->onDestroy(),把HelloWorld从Activity栈中移除销毁。
    这里值得提的就是HelloWorld 中finish方法,因为执行了他所以
    HelloWorld才会从Activity栈中移除销毁,这样当你按“返回”键返回的时候就回不到HelloWorld 这个Activity的界面了,而是直接回到的Android的应用程序列表
     。

三:分析结果

根据上面例子可见一个Activity在启动的时候会执行onCreate()->onStart()->onResume(),在结束(或离开)的时候会执行onPause()->onStop()->onDestroy(),这就是一个Activity的生命周期。
因此我们要在onCreate方法里把Activity的需要的东西准备好,也就是初始化;在onResume里对Activity里的东西做一些调整;在onPause做一些清理和保存工作(保存持久状态),因为这是最后的
机会,因为onPause完成之前Android不会结束托管Activity类的进程,而之后进程可能被结束。总结一下这几个周期方法的作用:

  1.  
    1. onCreate():创建Activity调用,用于Activity的初始化,还有个Bundle类型的参数,可以访问以前存储的状态。
    2. onStart():Activity在屏幕上对用户可见时调用
    3. onResume():Activity开始和用户交互的时候调用,这时该Activity是在Activity栈的顶部。
    4. onPause():Activity被暂停时调用,也就是你要对你能看到的这个Activity说byebye的时候调用,这里可以做一些清理和保存工作
    5. onStop():Activity被停止或者Activity变成不可见时调用
    6. onDestroy():Activity被从内存中移除,一般发生在执行finish方法时或者Android回收内存的时候


好了,最后让我们看一个API提供的Activity的状态图吧,看了他相信你对Activity的生命周期会更了解,如下图:
 

 

四:小结

这节主要是通过一个例子分析Activity声明周期,并对常用生命周期方法做了一些说明,应该什么时候使用他们。到这里Android的很基础的东西已经说完了,

分享到:
评论

相关推荐

    两分钟让你明白Android_Activity生命周期

    Android中的Activity生命周期是每个Android开发者必须深入理解的关键概念。...希望这个简短的教程能帮助你深入理解Android Activity生命周期,如果你已经完全明白了,那么恭喜你,你离成为Android开发高手又近了一步!

    详解教程Android开发中的Activity 组件

    `Activity`的生命周期由一系列回调方法组成,这些方法定义了`Activity`在其整个生存周期内不同阶段的行为。以下是主要的生命周期方法: 1. **`onCreate()`**:这是`Activity`首次创建时调用的第一个方法。开发者...

    Android学习系列教程实例.pdf

    Activity生命周期涉及的四种状态和七个主要生命周期回调方法对于管理应用界面和用户交互至关重要。 文档还探讨了各种界面元素的设计与实现,例如缓冲界面、宫格界面、Tab界面、二级列表、抽屉效果等,这些都是构建...

    Android、教程<经典> 10 Android通用应用

    1. **Activity生命周期管理**:Android应用中的Activity是用户界面的主要组成部分,了解其启动、暂停、恢复、销毁等生命周期方法是基础。开发者需要理解何时以及如何保存和恢复状态,以确保良好的用户体验。 2. **...

    传智播客activity教学视频

    ### Activity生命周期 了解Activity的生命周期对于编写可靠的Android应用程序至关重要。Activity的生命周期由一系列回调方法组成,这些方法会在特定时刻被系统调用。主要的方法包括: - `onCreate()`: 当Activity...

    android项目教程四

    教程可能涵盖如何创建和管理Activity,包括生命周期方法(如onCreate、onStart、onResume、onPause、onStop和onDestroy)的理解和使用。 4. **数据存储**:Android提供了多种数据存储方式,如SharedPreferences、...

    [DevDiv原创]Android学习系列教程实例

    根据给定的文件信息,以下是对“[DevDiv原创]Android学习系列教程实例”的关键知识点的详细解析: ### 一、Android系统结构与初始化流程 #### 1.1 Android的发展历史回顾 Android操作系统是由Google公司主导开发...

    android开发教程CHM

    6. **服务和服务生命周期**:服务在后台运行,即使用户离开应用也能继续执行任务。了解如何创建和管理服务对于构建长期运行的任务至关重要。 7. **BroadcastReceiver**:广播接收器允许应用响应系统或自定义广播...

    android四大组件学习教案.pptx

    Activity的生命周期由一系列回调方法管理,包括onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy()和onRestart()。从onCreate()开始,当Activity创建时,到onDestroy()结束,表示Activity的生命...

    Android游戏开发系列教程第四讲(后台服务)源码

    在"Android游戏开发系列教程第四讲(后台服务)"的源码中,`ghost_game_service`可能包含了以下内容: 1. **服务类**:`GhostGameService.java`,这个类会实现游戏所需的后台服务功能,比如音乐播放、数据同步等。 ...

    Mars android开发视频教程 下载地址

    根据提供的文件信息,这里主要涉及的是Mars老师的一系列Android开发视频教程的下载链接。下面将根据这些视频的标题来生成相关的知识点。 ### Android平台入门 - **知识点概述:** - Android平台介绍:Android是一...

    android-start-activity.7z

    5. **Activity生命周期**: 当Activity被启动时,它的生命周期开始。Android系统会调用一系列生命周期方法,如`onCreate()`, `onStart()`, `onResume()`。了解这些方法及其在何时被调用,对于管理Activity的状态和...

    Android开发系列视频教程及其实例源码地址

    - **Activity生命周期**:详解Activity组件的生命周期及其各个阶段的作用。 - **Handler机制**:讲解Android中用于线程间通信的Handler机制。 - **SQLite数据库操作**:教授如何在Android应用中使用SQLite进行数据...

    APP开发教程 Java Android移动端开发 6、Android应用程序组件之二-Activity交互及权限 共24页.pptx

    ### APP开发教程 Java Android移动端开发 6、Android应用程序组件之二-Activity交互及权限 #### 系统Intent的使用 在Android开发中,`Intent`是实现组件间通信的重要方式之一,它可以用来启动Activity、Service...

    Android官方培训教程

    在Android开发中,每个应用程序组件,如活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)和内容提供者(ContentProvider),都有一个生命周期,这些生命周期是由Android操作系统进行管理的。...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    Android核心分析系列教程

    AndroidApplication是所有Android应用程序的基础类,为应用程序提供了生命周期管理等功能。 #### 二十二、Android应用框架之Activity 这部分内容深入分析了Activity组件的功能和使用场景。Activity是Android应用...

    Android基础教程

    #### Activity生命周期 Activity的生命周期是指从创建到销毁的整个过程,由一系列回调方法构成,这些方法由Android框架自动调用。理解这些方法对于管理Activity的资源和状态至关重要。 - **onCreate(Bundle ...

    老罗android开发视频教程全集百度网盘链接

    - **Activity生命周期**:Activity在其整个生命周期中会经历不同的状态变化,如启动、暂停、停止和销毁等。 - **Activity通信**:不同Activity之间可以通过Intent进行通信。 2. **Service**:在后台运行的服务,...

Global site tag (gtag.js) - Google Analytics