Activity的四种状态
- 运行状态:Activity位于栈顶,此时处于屏幕最前方
- 暂停状态:Activity失去了焦点但仍然处于可见状态,如栈顶的Activity是透明的或者并不铺满整个屏幕
- 停止状态:Activity被其他activity完全遮挡,此时activity对用户不可见
- 销毁状态:Activity由于人为或系统原因(如低内存等)被销毁
Activity的生命周期函数如下:
Activity正常生命周期说明
- 完整生命周期:onCreate -> onStart -> onResume -> onPause -> onStop -> onDestroy,称entire lifetime
- 可见生命周期:执行onCreate时activity时不可见的,用户看见的是上一个activity,回调onStart方法时activity开始被用户可见,一直到onStop之前,此阶段Activity都是被用户可见,称visible lifetime
- 前台生命周期:回调onResume方法时,activity可以和用户交互,一直到回调onPause方法之前,此阶段称foreground lifetime
实际应用场景中,假设A Activity位于栈顶,从A Activity跳转到B Activity的回调顺序:
1、A被实例化,执行的回调有A:onCreate -> A:onStart -> A:onResume。
2、假设B全部遮挡住了A,将执行A:onPause -> B:onCreate -> B:onStart -> B:onResume -> A:onStop。
3、此时如果点击Back键,将依次执行B:onPause -> A:onRestart -> A:onStart -> A:onResume -> B:onStop -> B:onDestroy。
至此,Activity栈中只有A。此时如果按下Back键,系统返回到桌面,并依次执行A:onPause -> A:onStop -> A:onDestroy。此时如果按下Home键(非长按),系统返回到桌面,并依次执行A:onPause -> A:onStop。
由此可见,Back键和Home键主要区别在于是否会执行onDestroy。
对Back键、Home键的监听:
返回键监听:onBackPressed。
菜单键监听:onKeyDown或者onKeyUp都可。
HOME键:并没有直接的方法去监听,可以使用广播监听,在每次点击Home按键时都会发出一个action为Intent.ACTION_CLOSE_SYSTEM_DIALOGS的广播,它是关闭系统Dialog的广播,我们可以通过注册它来监听Home按键消息
横竖屏切换时acitivity生命周期:
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
Activity的四种启动模式:
- Standard:
- SingleTop
应用场景:在通知栏点击收到的通知,然后需要启动一个Activity,这个Activity就可以用singleTop,否则每次点击都会新建一个Activity。
- SingleTask
应用场景:浏览器主页
- SingleInstance
单一实例模式,整个手机操作系统里面只有一个实例存在。不同的应用去打开这个activity 共享公用的同一个activity。他会运行在自己单独,独立的任务栈里面,并且任务栈里面只有他一个实例存在。
应用场景:呼叫来电界面。
Activiy的销毁和重建:
Activity的销毁与重建发生最多的是横竖屏的切换,当Activity销毁之前,需要保存一些必要的数据,Activity重建的时候,使用这些数据来原样重现之前的Activity。
这其中只涉及到两个方法:
1.onSaveInstanceState()方法; Activity销毁前,保存数据的方法。
2.onRestoreInstanceState()方法; Activity重建时,读取数据的方法