2.Activity生命周期、任务栈、启动模式

原创 2016年05月31日 17:02:39

1.生命周期图

这里写图片描述
1.启动onCreate–>onStart–>onresume
2.被遮盖、跳转:onPause–> onStop
3.结束:onPause –> onStop –>onDestroy
4.重回界面:onRestart –> onStart –> onResume
5.在后台被杀死重启:onCreate –> onStart –> onResume

大家注意到,除了几个常见的方法外,我们还添加了onWindowFocusChanged、onSaveInstanceState、onRestoreInstanceState方法:
1.onWindowFocusChanged方法:在Activity窗口获得或失去焦点时被调用,例如创建时首次呈现在用户面前;当前Activity被其他Activity覆盖;当前Activity转到其他Activity或按Home键回到主屏,自身退居后台;用户退出当前Activity。以上几种情况都会调用onWindowFocusChanged,并且当Activity被创建时是在onResume之后被调用,当Activity被覆盖或者退居后台或者当前Activity退出时,它是在onPause之后被调用,如图所示:
这里写图片描述
这个方法在某种场合下还是很有用的,例如程序启动时想要获取视特定视图组件的尺寸大小,在onCreate中可能无法取到,因为窗口Window对象还没创建完成,这个时候我们就需要在onWindowFocusChanged里获取;如果大家已经看过我写的Android动画之Frame Animation这篇文章就会知道,当时试图在onCreate里加载frame动画失败的原因就是因为窗口Window对象没有初始化完成,所以最后我将加载动画的代码放到了onWindowFocusChanged中,问题迎刃而解。不过大家也许会有疑惑,为什么我在代码里将它注释掉了,因为对当前Activity每一个操作都有它的执行log,我担心这会影响到整个流程的清晰度,所以将它注掉,大家只要了解它应用的场合和执行的顺序就可以了。

2.onSaveInstanceState:(1)在Activity被覆盖或退居后台之后,系统资源不足将其杀死,此方法会被调用;(2)在用户改变屏幕方向时,此方法会被调用;(3)在当前Activity跳转到其他Activity或者按Home键回到主屏,自身退居后台时,此方法会被调用。第一种情况我们无法保证什么时候发生,系统根据资源紧张程度去调度;第二种是屏幕翻转方向时,系统先销毁当前的Activity,然后再重建一个新的,调用此方法时,我们可以保存一些临时数据;第三种情况系统调用此方法是为了保存当前窗口各个View组件的状态。onSaveInstanceState的调用顺序是在onPause之前。

3.onRestoreInstanceState:(1)在Activity被覆盖或退居后台之后,系统资源不足将其杀死,然后用户又回到了此Activity,此方法会被调用;(2)在用户改变屏幕方向时,重建的过程中,此方法会被调用。我们可以重写此方法,以便可以恢复一些临时数据。onRestoreInstanceState的调用顺序是在onStart之后。

固定横屏或者竖屏
清单文件里面设置screenOrientation:”portrait” 竖屏
screenOrientation:”landspace”//横屏

设置屏幕转换不销毁重建
清单文件里面设置: configChanges = “orientation”

2.任务栈
非Activity类型的Context并没有所谓的任务栈,所以待启动的Activity就找不到栈了。解决这个问题的方法就是为待启动的Activity指定FLAG_ACTIVITY_NEW_TASK标记位,这样启动的时候就为它创建一个新的任务栈,而此时Activity是以singleTask模式启动的。所有这种用Application启动Activity的方式不推荐使用,Service同Application。

3.启动模式(lunchMode)
stander:正常启动,每次跳转都新增一个acitivity到当前任务栈的顶端
singtop:如果栈顶存在,则不创建
singTask:如果栈中没有,则创建;如果栈中有,则弹出上面的activity,复用,调newInstance
singInstance:单一栈,创建一个新栈,如果重新intent,会复用并且调用onNewIntance

版权声明:本文为博主原创文章,未经博主允许不得转载。

Activity生命周期,任务栈和启动模式

Activity四个状态 1.处于前台的Activity,可见的,可以与用户交互的。 2.可见的却不能操作,只有系统内存资源紧缺时,才会收回此activity。比如部分遮挡,当你打算操作下面的应用,下...

Android基础总结——Activity生命周期、横竖屏切换和启动模式(任务栈)

熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的servlet,需要继承相应的基类,重写它的方法,这些方法会在合适的时间被servlet容器调用。其实android中的Acti...

Android - 界面跳转,显式/隐式意图,四大组件之Activity,Activity生命周期,横竖屏,任务栈启动模式

Android - 界面跳转,显式/隐式意图,四大组件之Activity,Activity生命周期,横竖屏,任务栈启动模式...

Activity生命周期与启动模式

  • 2017年08月08日 14:11
  • 26.15MB
  • 下载

Activity生命周期 启动模式实例

  • 2015年08月28日 19:29
  • 223KB
  • 下载

Day2 Activity生命周期/启动模式/最佳实践

Intent还可以结合Bundle一起用于传递数据,首先可以把需要传递的数据都保存在Bundle对象中,然后再将Bundle对象存放在Intent里。到了目标活动之后先从Intent中取出Bundle...

Android基础笔记(八)- Activity生命周期与任务栈

Android基础笔记(八)- Activity生命周期与任务栈 http://blog.csdn.net/biezhihua/article/details/44230603 ...

Android App开发基础篇—四大组件之Activity生命周期和启动模式

Android四大组件(一)—Activity的生命周期和启动模式 前言:作为一个页面单元,Activity在Android App开发中承担着显示页面,加载UI元素,提供应用与用户交互窗口的重要作用...

Activity生命周期、启动模式、IntentFilter详解

生命周期1、各状态描述 onCreate: 表示Activity开始创建。一般在里面做一些数据初始化的操作;onStart: 表示Activity正在启动,即将进入前台。这个时候Activity...

Android中Activity生命周期以及启动模式

Activity是我接触Android开发时候所接触的第一个”词”当初直接根据英语意思翻译成”活动”,现在想想其实理解成”界面”才是最准确的。众所周知,每一个Activity都有它自己的生命周期下面是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2.Activity生命周期、任务栈、启动模式
举报原因:
原因补充:

(最多只允许输入30个字)