美文网首页
Activity生命周期

Activity生命周期

作者: LingoGuo | 来源:发表于2018-10-08 20:35 被阅读11次

Activity简介

Activity是一种可以包含用户界面的组件,主要用于和用户进行交互,属于Android四大组件之一。

Activity生命周期

先上一张图:

屏幕快照 2017-09-08 上午11.18.17.png

onCreate(Bundle savedInstanceState):创建Activity时调用

onStart():Activity由不显示变为显示时调用,但实际用户还看不到

onResume():Activity在前台,可以和用户交互时调用

onPause():当Activity被部分遮住时这个方法会被调用,正常情况下紧接着onStop()会被调用,如果重新回到前台,那么onResume()会被调用

onStop():Activity在完全不可见时调用,如果重新回到前台,那么onRestart()、onStart()、onResume()会被相继调用

onRestart():Activity从完全不可见的状态重新启动时调用

onDestroy():Activity销毁之前调用

补充说明:

  • onSaveInstanceState(Bundle)用来保存当前Activity的状态,任玉刚在《Android开发艺术探索》提到,系统只会在Activity即将被销毁并且有机会重新显示的情况下才会调用它,例如横竖屏状态的切换会引起Activity实例的销毁和重建,这种情况下因为Activity即将销毁且会重新创建实例显示,所以会调用onSaveInstanceState。
  • onRestoreInstance(Bundle)则用来恢复存储的数据,参数是Activity销毁前onSaveInstanceState方法所保存的Bundle对象,一般异常情况下,例如横竖屏切换、Activity由于内存不足被杀死则会调用,正常情况下存储的数据可以通过onCreate(Bundle)的参数Bundle来恢复。

各种情况Activity的生命周期:
以下情况代码中均没有重写onSaveInstanceState和onRestoreInstanceState

  1. 点击应用进入主Activity界面,该Activity的onCreate、onStart、onResume相继会被调用;
  2. 点击应用进入主Activity界面,熄屏,该Activity的onPause、onSaveInstanceState、onStop相继被调用,再次亮屏,onRestart、onStart、onResume相继调用
  3. 点击应用进入主Activity界面,按Home键或者全面屏手势返回桌面,此时onPause、onSaveInstanceState、onStop相继被调用,再次回到应用主Activity界面,onCreate、onStart、onResume相继调用
  4. 假设某个Button点击后会跳转到新的Activity,那么此时主Activity的onPause会被调用,然后接着新的Activity的onCreate、onStart、onResume相继被调用,接着是主Acitivity的onSaveInstanceState、onStop相继被调用,返回主Activity,主Activity的onRestart、onStart、onResume相继被调用,除非主Activity由于内存不足已被系统杀死
  5. 通过Back键或者全面屏返回手势退出主Activity界面,主Activity的onPause、onStop、onDestroy相继被调用,再次进入主Activity的onCreate、onStart、onResume相继调用
  6. 点击应用进入主Activity界面,将设刚进入是竖屏状态,接着将手机横屏,那么该Activity的onPause、onSaveInstanceState、onStop、onDestroy、onCreate、onStart、onRestoreInstanceState、onResume将被相继调用,假设主Activity界面有一个EditView,在竖屏状态下输入“哈哈”,接着横屏,发现“哈哈”依然还在

补充说明:

  • 从最后一点的情况来看,在onSaveInstanceState和onRestoreInstanceState中系统会自动为我们做一定的数据存储和恢复工作,否则横竖屏切换,用户输入的“哈哈”不应该还在,因为代码并没有重写onSaveInstanceState和onRestoreInstanceState。
  • 从第4点来看,不可在onPause做太多工作,因为新的Acitivity要等旧的Activity的onPause调用完才会创建。
  • 关于onSaveInstanceState和onPause、onStop的调用次序,任玉刚在《Android开发艺术探索》这本书提高,onSaveInstanceState会在onStop之前调用,但与onPause的次序不定,而onRestoreInstanceState会在onStart之后调用。
  • 如果从主Activity跳转到其他Activity,而此时由于内存不足,主Activity被杀死,那么点击Back键返回主Activity时主Activity会被重新创建,任玉刚在《Android开发艺术探索》提到情况其数据存储和恢复过程和横竖屏切换一样。

相关文章

网友评论

      本文标题:Activity生命周期

      本文链接:https://www.haomeiwen.com/subject/athcaftx.html