前言:

学习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

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线程的学习
  2. 为什么 Android(安卓)截屏需要 root 权限
  3. android原生和H5交互(转)
  4. 《浅谈android进程》
  5. 「Android」Android的消息机制
  6. Android(安卓)启动流程
  7. Android(安卓)call setting 源码分析 从顶层到底层(下)
  8. 小熊android学习总结:Linux内核怎样启动Android
  9. Android(安卓)Service组件(1)

随机推荐

  1. 记一次生产环境问题解决案例(k8s环境)
  2. ArrayList底层
  3. 苹果Mac强大的图床软件:​​​​PicGo
  4. 【东哥说书】俞军产品方法论
  5. Apache Flink 商业公司 Ververica 又有几
  6. 一文了解 Apache Hive 联邦查询(Query Fed
  7. 从行存储到 RCFile,Facebook 为什么要设计
  8. K8S进阶实践 之 ConfigMap配置文件挂载
  9. Prism:Uber 的 Presto 查询网关服务
  10. 面试专题—iOS内存不够怎么办?底层原理