Activity生命周期

转载 2012年03月24日 01:29:18

前言:

    学习Android也有一年了,不敢说精通,但也小有心得。相信很多android初学者和我刚开始接触android时一样,往往只了解某些知识点的表面,别人要是问点啥,还真就说不出个一二三来。所以,我打算将自己学习android的过程整理一下,发表出来,希望对学习android的同仁有所帮助,也算给自己的学习进行总结吧。在我的学习过程中,有一点经验和大家分享一下,那就是“Deep Learning”---深入学习。多花点时间深入学习,总比走马观花强得多。今天,就先说说Activity的生命周期吧,很多面试官都喜欢问这个问题。。。


     Activity这个类,定义了一些回调函数来控制它的生命周期。

  • onCreate()  ——  当Activity第一次创建的时候被调用。
  • onStart()  ——  当Activity对用户可见的时候被调用。
  • onResume()  ——  当Activity开始和用户交互的时候被调用。
  • onPause()  ——  正在运行的Activity马上要被暂停的时候被调用,此时,在这之前的Activity被重新获取。
  • onStop()  ——  当Activity不在对用户可见的时候被调用。

    默认地,被创建的Activity中都包含一个onCreate()方法,通过这个方法,可以创建显示给用户的UI组件。

    从“被创建”到“被销毁”的生命周期图示:

    想要理解Activity生命周期的最好办法就是创建一个工程,并实现所有的回调函数,然后让Activity与用户交互。

    1.创建一个名为Activity101的工程。

    2.Activity101Activity.java中的代码。

  1. package net.horsttnann.Activity101;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.util.Log;  
  6.   
  7. public class Activity101Activity extends Activity {  
  8.     String tag = "Lifecycle";  
  9.   
  10.     /** Called when the activity is first created. */  
  11.     @Override  
  12.     public void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         setContentView(R.layout.main);  
  15.         Log.d(tag, "In the onCreate() event");  
  16.     }  
  17.   
  18.     public void onStart() {  
  19.         super.onStart();  
  20.         Log.d(tag, "In the onStart() event");  
  21.     }  
  22.   
  23.     public void onRestart() {  
  24.         super.onRestart();  
  25.         Log.d(tag, "In the onRestart() event");  
  26.     }  
  27.   
  28.     public void onResume() {  
  29.         super.onResume();  
  30.         Log.d(tag, "In the onResume() event");  
  31.     }  
  32.   
  33.     public void onPause() {  
  34.         super.onPause();  
  35.         Log.d(tag, "In the onPause() event");  
  36.     }  
  37.   
  38.     public void onStop() {  
  39.         super.onStop();  
  40.         Log.d(tag, "In the onStop() event");  
  41.     }  
  42.   
  43.     public void onDestroy() {  
  44.         super.onDestroy();  
  45.         Log.d(tag, "In the onDestroy() event");  
  46.     }  
  47. }  

    3.按F11在模拟器上调试。

    4.当这个activity第一次被加载:

  1. 03-23 01:54:32.602: D/Lifecycle(644): In the onCreate() event  
  2. 03-23 01:54:32.602: D/Lifecycle(644): In the onStart() event  
  3. 03-23 01:54:32.602: D/Lifecycle(644): In the onResume() event  


    5.按“返回键”,程序退出:

  1. 03-23 01:58:28.307: D/Lifecycle(644): In the onPause() event  
  2. 03-23 01:58:28.762: D/Lifecycle(644): In the onStop() event  
  3. 03-23 01:58:28.837: D/Lifecycle(644): In the onDestroy() event  

    6.重新进入程序:

  1. 03-23 01:59:38.282: D/Lifecycle(644): In the onCreate() event  
  2. 03-23 01:59:38.292: D/Lifecycle(644): In the onStart() event  
  3. 03-23 01:59:38.302: D/Lifecycle(644): In the onResume() event  

    7.按“拨号键”进入拨号界面,activity被转入后台运行:

  1. 03-23 02:00:23.252: D/Lifecycle(644): In the onPause() event  
  2. 03-23 02:00:24.522: D/Lifecycle(644): In the onStop() event  

    8.注意,此时onDestroy()方法并没有被触发,说明这个activity还在内存中。按“返回键”,退出拨号界面,这个Activity又重新可见了。观察LogCat窗口中的输出:

  1. 03-23 02:03:25.262: D/Lifecycle(644): In the onRestart() event  
  2. 03-23 02:03:25.262: D/Lifecycle(644): In the onStart() event  
  3. 03-23 02:03:25.262: D/Lifecycle(644): In the onResume() event  

    onRestart()方法被触发了,接下来是onStart()和onResume()。

    可以从这个简单的例子中看到,当点击“返回键”的时候,activity被销毁了,与此同时,activity当前的状态也将消失。有一点需要特别注意,onPause()方法仅在两种情况下被调用:一个是在Activity被转入后台运行的时候,一个是用户按“返回键”将activity销毁的时候。

    当一个anctivity被启动之后,onStart()和onResume()方法总是要被调用的,无论这个activity是从后台重新获取的,还是首次被创建的。当一个anctivity第一次被创建的时候,onCreate()方法总是被调用。

    从上面的例子,我们可以得出结论:

  • 使用onCreate()方法去创建和初始化将要使用的组件。
  • 使用onResume()方法去开启服务,执行那些需要在“activity前台”运行的代码。
  • 使用onPause()方法去停止服务,执行那些需要在“activity后台”运行的代码。
  • 使用onDestroy()方法去释放资源。

Activity生命周期的回调,你应该知道得更多!--Android源码剖析(上)

学习Android近一年,最近几天总算把Activity启动的生命周期回调流程走通了,因为所涉及的知识点太多,赶快做了笔记,不然过几天就忘了。 需要了解的几点概念和知识点: Instrumentati...
  • yalinfendou
  • yalinfendou
  • 2015年07月16日 11:31
  • 2731

我之 Android Activity生命周期

Activity生命周期
  • Garlic_You_Ruthless
  • Garlic_You_Ruthless
  • 2015年07月27日 14:20
  • 1202

Activity生命周期交互设计思想和应用场景(附源码)

Activity生命周期交互设计思想 1.在多个Activity进行交互的时候,为什么要先暂停(onPause()方法)当前的Activity,执行新的Activity的onCreate()方法...
  • u014225510
  • u014225510
  • 2015年08月02日 15:31
  • 675

Android 监听各个Acitivity的生命周期

Android Application 监听Activity生命周期
  • csm_qz
  • csm_qz
  • 2016年03月21日 15:23
  • 705

Android之Activity生命周期浅析(一)

Activity作为四大组件之一,出现的频率相当高,基本上我们在android的各个地方都能看见它的踪影,因此深入了解Activity,对于开发高质量应用程序是很有帮助的。今天我们就来详细地聊聊Act...
  • javazejian
  • javazejian
  • 2016年07月17日 15:31
  • 28359

Android必考面试题之一——Activity的生命周期以及流程图

生命周期包括几个方法:onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy()...... 我们也基本了解了Activity...
  • csdavy103
  • csdavy103
  • 2016年12月19日 16:53
  • 624

Android面试题(一)——Activity的生命周期和启动模式

Android面试题(一)——Activity的生命周期和启动模式引言 这份面试题系列文章旨在查漏补缺,通过常见的面试题发现自己在Android基础知识上的遗漏和欠缺,验证所学是否扎实。 这是系列的第...
  • a471893438
  • a471893438
  • 2016年07月03日 19:44
  • 1693

Activity生命周期(面试必问)

Activity生命周期 一个Activity可以基本上存在三种状态: 恢复 这项Activity是在屏幕前的,并有用户取得其焦点。(此状态,有时也简称为“运行”。)   暂停 另一个Ac...
  • u013128651
  • u013128651
  • 2016年04月10日 19:28
  • 620

Activity生命周期经典图解:

Activity生命周期经典图解: 按键对生命周期的影响: BACK键: 当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop...
  • u010527630
  • u010527630
  • 2016年09月10日 22:24
  • 422

Android:Activity——生命周期深入详解

一、生命周期全面分析Android活动默认运行在当前进程所拥有的栈中,前台可见的活动则在活动栈的最顶部。其他后台活动则在栈的里面,在正常的情况下(内存充足)其他的活动并没有被回收或者杀死,它们仍然存在...
  • woshimalingyi
  • woshimalingyi
  • 2016年03月23日 13:34
  • 2752
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Activity生命周期
举报原因:
原因补充:

(最多只允许输入30个字)