Activity

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属性-为以上四种之一即可。

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。 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Activity 一、四种形态 运行状态: 当 Activity 处于栈的顶层,可见,并可与用户进行交互 onRe...
    任教主来也阅读 1,870评论 1 10
  • 第一章主要讲了以下几个知识点: Activity生命周期 Activity的启动模式 IntentFilter匹配...
    Utte阅读 1,254评论 0 3
  • Android的开发中我们大部分都是和Activity打交道,而想很好的运用Activity首先必须要清楚Acti...
    云天随笔阅读 1,321评论 0 1
  • 学习资料: Android群英传 Android开发艺术探索 Activity是与用户交互的第一接口,感觉说是四大...
    英勇青铜5阅读 2,831评论 15 41
  • 岁暮天寒,雪舞蹁跹。羁旅地,十载又三。乡音偶闻,故友难见。梦乡月明,乡水甜,儿伴唤。 骅骝向北,越鸟思南。又何惧,...
    扁舟孑阅读 1,184评论 6 26

友情链接更多精彩内容