本章节翻译自《Beginning-Android-4-Application-Development》,如有翻译不当的地方,敬请指出。

原书购买地址http://www.amazon.com/Beginning-Android-4-Application-Development/dp/1118199545/


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

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

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

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

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

1. 创建一个工程:Activity101。

2. Activity101Activity.java中的代码。

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在模拟器上调试。

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

[plain] view plain copy
  1. 03-2301:54:32.602:D/Lifecycle(644):IntheonCreate()event
  2. 03-2301:54:32.602:D/Lifecycle(644):IntheonStart()event
  3. 03-2301:54:32.602:D/Lifecycle(644):IntheonResume()event

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

[plain] view plain copy
  1. 03-2301:58:28.307:D/Lifecycle(644):IntheonPause()event
  2. 03-2301:58:28.762:D/Lifecycle(644):IntheonStop()event
  3. 03-2301:58:28.837:D/Lifecycle(644):IntheonDestroy()event

6. 重新进入程序:

[plain] view plain copy
  1. 03-2301:59:38.282:D/Lifecycle(644):IntheonCreate()event
  2. 03-2301:59:38.292:D/Lifecycle(644):IntheonStart()event
  3. 03-2301:59:38.302:D/Lifecycle(644):IntheonResume()event

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

[plain] view plain copy
  1. 03-2302:00:23.252:D/Lifecycle(644):IntheonPause()event
  2. 03-2302:00:24.522:D/Lifecycle(644):IntheonStop()event

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

[plain] view plain copy
  1. 03-2302:03:25.262:D/Lifecycle(644):IntheonRestart()event
  2. 03-2302:03:25.262:D/Lifecycle(644):IntheonStart()event
  3. 03-2302:03:25.262:D/Lifecycle(644):IntheonResume()event

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

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

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


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

  • 使用onCreate()方法去创建和初始化将要使用的组件。
  • 使用onResume()方法去开启服务和执行代码。当Activity处于“前台”模式下,这些服务和代码需要被开启或执行。
  • 使用onPause()方法去停止服务和阻断代码。当Activity处于“后台”模式下,这些服务和代码不需要被开启或执行。
  • 使用onDestroy()方法去释放资源。

更多相关文章

  1. 监听器Listener
  2. 三行代码实现白天夜间模式流畅切换的实现库
  3. Andriod 单元测试 Test run failed:Unable to find instrumentat
  4. Android(安卓)textview字体颜色显示和图片显示
  5. android中 onResume()方法什么时候执行?
  6. Android(安卓)Exception No such table android_metadata
  7. android media 播放器
  8. Android中JNI的使用之HelloWorld
  9. ubuntu下载编译android源码(二)

随机推荐

  1. android 组件,xml布局中属性详解
  2. Android(安卓)进程内存、CPU使用查看
  3. Android(安卓)----蓝牙架构
  4. Android单个模块编译
  5. android 抽屉类slidingdrawer源码解析及
  6. Android中getSystemService详解
  7. android 相对布局属性说明
  8. Android查询短信数据库
  9. Android(安卓)TextView 支持的HTML标签
  10. Android中shape的使用