前言:

学习Android也有一年多了,目前在从事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] view plain copy
  1. packagenet.horsttnann.Activity101;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.util.Log;
  5. publicclassActivity101ActivityextendsActivity{
  6. Stringtag="Lifecycle";
  7. /**Calledwhentheactivityisfirstcreated.*/
  8. @Override
  9. publicvoidonCreate(BundlesavedInstanceState){
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.main);
  12. Log.d(tag,"IntheonCreate()event");
  13. }
  14. publicvoidonStart(){
  15. super.onStart();
  16. Log.d(tag,"IntheonStart()event");
  17. }
  18. publicvoidonRestart(){
  19. super.onRestart();
  20. Log.d(tag,"IntheonRestart()event");
  21. }
  22. publicvoidonResume(){
  23. super.onResume();
  24. Log.d(tag,"IntheonResume()event");
  25. }
  26. publicvoidonPause(){
  27. super.onPause();
  28. Log.d(tag,"IntheonPause()event");
  29. }
  30. publicvoidonStop(){
  31. super.onStop();
  32. Log.d(tag,"IntheonStop()event");
  33. }
  34. publicvoidonDestroy(){
  35. super.onDestroy();
  36. Log.d(tag,"IntheonDestroy()event");
  37. }
  38. }

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

Android 程式开发:(一)详解Activity —— 1.1生命周期(前言)_第1张图片

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()方法去释放资源。
  • 更多信息请查看java进阶网http://www.javady.com

更多相关文章

  1. Android四大组件——Activity生命周期详解
  2. Android 2.3用户增长到10%
  3. Android实现全屏显示的方法 固定横屏或者竖屏的方法
  4. Android Studio 单刷《第一行代码》系列 06 —— Fragment 生命
  5. 关于安装Android Studio的一些问题的解决方法
  6. android 按钮点击的两种方法以及长按事件

随机推荐

  1. Lottie Android(安卓)初探
  2. Android(安卓)FrameWork——Binder机制详
  3. Android培训班(103)内核入口汇编3
  4. Android(安卓)SharedPreferences存储的正
  5. Android(安卓)APP tcpdump抓包方法
  6. android使用datepicker计算年龄
  7. Android(安卓)自定义控件实现ListView索
  8. Android(安卓)操作蓝牙Ble时数据转换的常
  9. Android(安卓)4.0 编译全程
  10. android 编译出来的执行文件 not executa