写点什么

Activity 的生命周期,这可能是目前最全的

发布于: 2021 年 11 月 08 日

为了便于大家更好的理解,我简单的写了一个 Demo,不明白 Activity 周期的朋友们,可以亲手实践一下,大家按照我的步骤来。


第一步:新建一个 Android 工程,我这里命名为 ActivityDemo.


第二步:修改 ActivityDemo.java(我这里重新写了以上的七种方法,主要用 Log 打印),代码如下:


[java]? view plain copy


  1. package?com.tutor.activitydemo;??

  2. import?android.app.Activity;??

  3. import?android.os.Bundle;??

  4. import?android.util.Log;??

  5. public?class?ActivityDemo?extends?Activity?{??

  6. ????private?static?final?String?TAG?=?"ActivityDemo";??

  7. ????public?void?onCreate(Bundle?savedInstanceState)?{??

  8. ????????super.onCreate(savedInstanceState);??

  9. ????????setContentView(R.layout.main);??

  10. ????????Log.e(TAG,?"start?onCreate~~~");??

  11. ????}??

  12. ????@Override??

  13. ????protected?void?onStart()?{??

  14. ????????super.onStart();??

  15. ????????Log.e(TAG,?"start?onStart~~~");??

  16. ????}??

  17. ????@Override??

  18. ????protected?void?onRestart()?{??

  19. ????????super.onRestart();??

  20. ????????Log.e(TAG,?"start?onRestart~~~");??

  21. ????}??

  22. ????@Override??

  23. ????protected?void?onResume()?{??

  24. ????????super.onResume();??

  25. ????????Log.e(TAG,?"start?onResume~~~");??

  26. ????}??

  27. ????@Override??

  28. ????protected?void?onPause()?{??

  29. ????????super.onPause();??

  30. ????????Log.e(TAG,?"start?onPause~~~");??

  31. ????}??

  32. ????@Override??

  33. ????protected?void?onStop()?{??

  34. ????????super.onStop();??

  35. ????????Log.e(TAG,?"start?onStop~~~");??

  36. ????}??

  37. ????@Override??

  38. ????protected?void?onDestroy()?{??

  39. ????????super.onDest


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


roy();??


  1. ????????Log.e(TAG,?"start?onDestroy~~~");??

  2. ????}??

  3. }??


第三步:运行上述工程,效果图如下(没什么特别的):



核心在 Logcat 视窗里,如果你还不会用 Logcat 你可以看一下我的这篇文章?Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)?,我们打开应用时先后执行了 onCreate()->onStart()->onResume 三个方法,看一下 LogCat 视窗如下:



BACK 键:


当我们按 BACK 键时,我们这个应用程序将结束,这时候我们将先后调用 onPause()->onStop()->onDestory()三个方法,如下图所示:



HOME 键:


当我们打开应用程序时,比如浏览器,我正在浏览 NBA 新闻,看到一半时,我突然想听歌,这时候我们会选择按 HOME 键,然后去打开音乐应用程序,而当我们按 HOME 的时候,Activity 先后执行了 onPause()->onStop()这两个方法,这时候应用程序并没有销毁。如下图所示:



而当我们再次启动 ActivityDemo 应用程序时,则先后分别执行了 onRestart()->onStart()->onResume()三个方法,如下图所示:



这里我们会引出一个问题,当我们按 HOME 键,然后再进入 ActivityDemo 应用时,我们的应用的状态应该是和按 HOME 键之前的状态是一样的,同样为了方便理解,在这里我将 ActivityDemo 的代码作一些修改,就是增加一个 EditText。


第四步:修改 main.xml 布局文件(增加了一个 EditText),代码如下:


[java]? view plain copy


  1. <?xml?version="1.0"?encoding="utf-8"?>??

  2. <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??

  3. ????android:orientation="vertical"??

  4. ????android:layout_width="fill_parent"??

  5. ????android:layout_height="fill_parent"??

  6. ????>??

  7. <TextView????

  8. ????android:layout_width="fill_parent"???

  9. ????android:layout_height="wrap_content"???

  10. ????android:text="@string/hello"??

  11. ????/>??

  12. <EditText??

  13. ????android:id="@+id/editText"??

  14. ????android:layout_width="fill_parent"??

  15. ????android:layout_height="wrap_content"??

  16. />??

  17. </LinearLayout>??


第五步:然后其他不变,运行 ActivityDemo 程序,在 EditText 里输入如"Frankie"字符串(如下图:)



这时候,大家可以按一下 HOME 键,然后再次启动 ActivityDemo 应用程序,这时候 EditText 里并没有我们输入的"Frankie"字样,如下图:



这显然不能称得一个合格的应用程序,所以我们需要在 Activity 几个方法里自己实现,如下第六步所示:


第六步修改 ActivityDemo.java 代码如下:


[java]? view plain copy


  1. package?com.tutor.activitydemo;??

  2. import?android.app.Activity;??

  3. import?android.os.Bundle;??

  4. import?android.util.Log;??

  5. import?android.widget.EditText;??

  6. public?class?ActivityDemo?extends?Activity?{??

  7. ????private?static?final?String?TAG?=?"ActivityDemo";??

  8. ????private?EditText?mEditText;??

  9. ????//定义一个 String?类型用来存取我们 EditText 输入的值??

  10. ????private?String?mString;??

  11. ????public?void?onCreate(Bundle?savedInstanceState)?{??

  12. ????????super.onCreate(savedInstanceState);??

  13. ????????setContentView(R.layout.main);??

  14. ????????mEditText?=?(EditText)findViewById(R.id.editText);??

  15. ????????Log.e(TAG,?"start?onCreate~~~");??

  16. ????}??

  17. ????@Override??

  18. ????protected?void?onStart()?{??

  19. ????????super.onStart();??

  20. ????????Log.e(TAG,?"start?onStart~~~");??

评论

发布
暂无评论
Activity的生命周期,这可能是目前最全的