当前位置: 代码迷 >> Android >> Android 程式开发:(1)详解Activity —— 1.1生命周期(前言)
  详细解决方案

Android 程式开发:(1)详解Activity —— 1.1生命周期(前言)

热度:91   发布时间:2016-05-01 20:19:30.0
Android 程式开发:(一)详解Activity —— 1.1生命周期(前言)

?

前言:

????学习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 plaincopy
  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第一次被加载:

?

[plain]?view plaincopy
  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.按“返回键”,程序退出:

?

[plain]?view plaincopy
  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.重新进入程序:

?

[plain]?view plaincopy
  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被转入后台运行:

?

[plain]?view plaincopy
  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窗口中的输出:

?

[plain]?view plaincopy
  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()方法去释放资源。
  • 更多信息请查看?java进阶网?http://www.javady.com
  相关解决方案