灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:1993回复:0

Android新手入门教程(一):理解Activityの生命周期

楼主#
更多 发布于:2012-09-06 13:47


前言:
    学习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中的代码。
[java]
package net.horsttnann.Activity101;

import Android.app.Activity;
import Android.os.Bundle;
import Android.util.Log;

public class Activity101Activity extends Activity {
    String tag = "Lifecycle";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.d(tag, "In the onCreate() event");
    }

    public void onStart() {
        super.onStart();
        Log.d(tag, "In the onStart() event");
    }

    public void onRestart() {
        super.onRestart();
        Log.d(tag, "In the onRestart() event");
    }

    public void onResume() {
        super.onResume();
        Log.d(tag, "In the onResume() event");
    }

    public void onPause() {
        super.onPause();
        Log.d(tag, "In the onPause() event");
    }

    public void onStop() {
        super.onStop();
        Log.d(tag, "In the onStop() event");
    }

    public void onDestroy() {
        super.onDestroy();
        Log.d(tag, "In the onDestroy() event");
    }
}
    3.按F11在模拟器上调试。www.atcpu.com
    4.当这个activity第一次被加载:
[plain]
03-23 01:54:32.602: D/Lifecycle(644): In the onCreate() event
03-23 01:54:32.602: D/Lifecycle(644): In the onStart() event
03-23 01:54:32.602: D/Lifecycle(644): In the onResume() event




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

[plain]
03-23 01:58:28.307: D/Lifecycle(644): In the onPause() event
03-23 01:58:28.762: D/Lifecycle(644): In the onStop() event
03-23 01:58:28.837: D/Lifecycle(644): In the onDestroy() event
03-23 01:58:28.307: D/Lifecycle(644): In the onPause() event
03-23 01:58:28.762: D/Lifecycle(644): In the onStop() event
03-23 01:58:28.837: D/Lifecycle(644): In the onDestroy() event

    6.重新进入程序:

[plain]
03-23 01:59:38.282: D/Lifecycle(644): In the onCreate() event
03-23 01:59:38.292: D/Lifecycle(644): In the onStart() event
03-23 01:59:38.302: D/Lifecycle(644): In the onResume() event
03-23 01:59:38.282: D/Lifecycle(644): In the onCreate() event
03-23 01:59:38.292: D/Lifecycle(644): In the onStart() event
03-23 01:59:38.302: D/Lifecycle(644): In the onResume() event

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

[plain]
03-23 02:00:23.252: D/Lifecycle(644): In the onPause() event
03-23 02:00:24.522: D/Lifecycle(644): In the onStop() event
03-23 02:00:23.252: D/Lifecycle(644): In the onPause() event
03-23 02:00:24.522: D/Lifecycle(644): In the onStop() event

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

[plain]
03-23 02:03:25.262: D/Lifecycle(644): In the onRestart() event
03-23 02:03:25.262: D/Lifecycle(644): In the onStart() event
03-23 02:03:25.262: D/Lifecycle(644): In the onResume() event
03-23 02:03:25.262: D/Lifecycle(644): In the onRestart() event
03-23 02:03:25.262: D/Lifecycle(644): In the onStart() event
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()方法去释放资源。


喜欢0 评分0
游客

返回顶部