Activity生命周期
2018-10-08 本文已影响11人
LingoGuo
Activity简介
Activity是一种可以包含用户界面的组件,主要用于和用户进行交互,属于Android四大组件之一。
Activity生命周期
先上一张图:
屏幕快照 2017-09-08 上午11.18.17.pngonCreate(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
- 点击应用进入主Activity界面,该Activity的onCreate、onStart、onResume相继会被调用;
- 点击应用进入主Activity界面,熄屏,该Activity的onPause、onSaveInstanceState、onStop相继被调用,再次亮屏,onRestart、onStart、onResume相继调用
- 点击应用进入主Activity界面,按Home键或者全面屏手势返回桌面,此时onPause、onSaveInstanceState、onStop相继被调用,再次回到应用主Activity界面,onCreate、onStart、onResume相继调用
- 假设某个Button点击后会跳转到新的Activity,那么此时主Activity的onPause会被调用,然后接着新的Activity的onCreate、onStart、onResume相继被调用,接着是主Acitivity的onSaveInstanceState、onStop相继被调用,返回主Activity,主Activity的onRestart、onStart、onResume相继被调用,除非主Activity由于内存不足已被系统杀死
- 通过Back键或者全面屏返回手势退出主Activity界面,主Activity的onPause、onStop、onDestroy相继被调用,再次进入主Activity的onCreate、onStart、onResume相继调用
- 点击应用进入主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开发艺术探索》提到情况其数据存储和恢复过程和横竖屏切换一样。