Activity生命周期
OnCreate() 当前页面被创建
onStart() 当前页面被启动
onResume() 页面可视 当前页面处于栈顶 可以看到 并且 可以与用户进行交互 就处于这个生命周期
OnPause() 在这个生命周期中 页面可视 但是 被其他的有所遮挡 不可以与用户交互 正在停止
onStop() 页面不可见 即将被GC回收器回收 就处于这个生命周期
onDestory() 当当前界面被销毁的时候就会走这个生命周期 此时当前页面已经完全被销毁 GC回收器已经将其回收 做出了释放
onRestart() 当用户按下返回键回到主页面以后 再次进入App 才会走onRestart
启动一个Activity:onCreate-onStart-onResume
返回到主界面:onPause-onStop-onDestory
home键:onPause-onStop; 然后再次启动:onRestart-onStart-onResume
从一个Activity跳转到另一个Activity,第一个Activity:onPause-onStop,第二个Activity:onCreate-onStart-onResume
从第二个Activity返回到第一个Activity,第二个onPause-onStop-onDestory,第一个onRestart-onStart-onResume
横竖屏切换:onPause-onStop-onDestory-onRestart-onStart-onResume
按下电源键:onPause-onStop
任务栈和启动模式
当我们每打开一个Activity的时候它会就往Activity任务栈中压入一个Activity,当我们每销毁一个Activity的时候它会从Activity任务栈中弹出一个Activity,由于安卓系统自身的设计,我们只能在手机屏幕上获取当前一个Activity的焦点即栈顶元素(最上面的Activity),其余的Activity会暂居后台等待系统调用。
关于任务栈的概念:
任务栈是用来提升体验而设计的:
(1) 程序打开时就创建了一个任务栈, 用于存储当前程序的activity,当前程序(包括被当前程序所调用的)所有的activity属于一个任务栈。
(2) 一个任务栈包含了一个activity的集合, 可以有序的选择哪一个activity和用户进行交互,只有在任务栈栈顶的activity才可以跟用户进行交互。
(3) 任务栈可以移动到后台,并且保留了每一个activity的状态. 并且有序的给用户列出它们的任务, 而且还不丢失它们状态信息。
(4) 退出应用程序时,当把所有的任务栈中所有的activity清除出栈时,任务栈会被销毁,程序退出。
Activity的4种启动方式
为了解决任务栈产生的问题,Android为Activity设计了启动模式。
启动模式(launchMode)在多个Activity跳转的过程中扮演着重要的角色,它可以解决是否生成新的Activity实例,是否重用已经存在的Activity实例,是否和其他实例共用一个任务栈。任务栈是一个具有栈结构的对象,一个任务栈可以管理多个Activity,每启动一个应用,也就创建一个与之对应的任务栈。
Activity一共有以下四种launchMode模式:1、standard 2、singTop 3、singTask 4、singleInstance,我们可以在AndroidManifest.xml配置<activity>的android:launchMode属性-为以上四种之一即可。
1 standard。在Activity启动模式为standard(默认)的情况下,不管之前有没有Activity实例,每一次启动Activity都会创建一个新的Activity实例,并置于Activity任务栈栈顶。
2 singTop。在Activity启动模式为singleTop(栈顶任务唯一)的情况下,如果当前Activity处于栈顶,那么它就不会再去实例化一个新的Activity,当Activity不处于栈顶的时候,会重新实例化一个新的Activity并置于栈顶。
3 singTask。在Activity启动模式为singleTask(唯一实例)的情况下,当启动Activity的时候,如果当前Activity不存在则实例化一个新的Activity,如果当前Activity在任务栈中已经存在,则会复用这个Activity实例
4 singleInstance。和singleTask一样保持唯一实例,然后它的退出顺序是不再是根据调用顺序,而是在不同的任务栈中,从上往下退出。
设置启动模式设置启动模式的方法有两种
- 通过在AndroidMainifest文件中的属性 android:launchMode 来设置Activity的启动模式
- 通过设置Intent的Flag来设置一个Activity的启动模式
Intent.FLAG_ACTIVITY_NEW_TASK 创建一个新的Task来启动一个Activity,但启动的每个Activity都将在一个新的Task中,该Flag通常使用于从service中启动Activity的场景。 - Intent.FLAG_ACTIVITY_SINGLE_TOP 使用singletop的模式来启动一个Activity - Intent.FLAG_ACTIVITY_CLEAR_TOP 使用singleTask模式来启动一个Activity - Intent.FLAG_ACTIVITY_NO_HISTORY 使用这种模式启动Activity,当该Activity启动其他Activity后,该Activity就会消失,不会保留在Activity栈中。 如A-B,B以这种模式启动C,C启动D,则当前Activity栈中只有ABD。
网友评论