activity生命周期实例(不同启动模式)
1、生命周期的几个阶段介绍:
onCreate:
表示activity被创建,做一些初始化工作如调用setContentView去加载界面布局资源、初始化Acitivity所需数据等。改方法中调用destroy时,其它生命周期不会由,直接进入onDestroy.
onRestart:
Activity从不可见变成可见状态时,onRestart就会被调用。打开一个新的activity时,onPause和onStop会被调用,回到当前Acitivity时 onRestart会被首先调用。
onStart:
onRestart被调用后,onStart会被调用。
onRestoreInstanceState:
恢复activity页面的数据,一般由 onSaveInstanceState 函数保存的数据。
onResume:
表示activity已经可见,并且出现在前台开始活动。onStart和onResume都表示avtivity已经可见,但是onStart活动还在后台,onResume已经显示到前台。一般可以用来开启动画/访问相机 等
onPostCreate:
当整个activity都起来的时候,会被调用。
onPause:
表示Activity正在停止,正常情况下紧接着onStop就会被调用。
onSaveInstanceState:
用于保存view相关的数据,但是android并不保证onPause之后一定调用该方法,有可能在onPause之前或者之后。
onStop:
表示activity即将停止,可以做些轻量级的回收工作
onDestroy:
表示activity即将被销毁,这是生命周期的最后一个回调,可以做些回收工作和最终的资源的释放。

2、不同启动模式下的生命周期顺序
standard模式下活动启动log
启动页面A:
跳转到B页面:

返回到页面A:

返回上一页面不会调用onCreate方法
如果跳转到B,然后到C,再返回A:

该模式下,onCreate方法会被重新调用
A 启动 A (Activity堆栈中有自身的Activity)时的log如下: 输出为方法的名称 和 Activity.hashCode()

有上述的log可以看出,每次调用 不管堆栈里面有没有自身这个Activity都会create相同的Activity
singleTast模式下活动的启动log
启动A页面:

跳转到B页面:

返回到A页面:

如果跳转到B,然后到C,再返回A:
和从B返回到A相同,在singleTast启动模式中,对于已经启动的活动不会在调用onCreate方法。
SingleTop模式下
A start A时,不会重新create一个Activity,因为活动栈顶存在这个Acitivity,不需要再创建
A start B B 再 start A时,会重新创建 这个Activity,因为栈顶已经没有这个Activity
SingleInstance模式
singleTask类似,不同点是singleInstance要求activity的实例不仅只有一个,并且整个task中只有一个activity实例
启动模式的设置:
a/ 在androidMainifiest中设置Activity的启动模式
<activity
android:name=".MainActivity"
android:launchMode="singleTask"
android:configChanges="orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
b/ 在Intent中设置标志位来指定Activity的启动模式
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Flag的属性有四种:
FLAG_ACTIVITY_NEW_TASK ------- singleTask
FLAG_ACTIVITY_CLEAR_TOP ------- clearTop //当栈顶有其他activity时,会把他们出栈处理。 singleTask模式会 调用 onNewIntent
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED ------- clearTop
FLAG_ACTIVITY_SINGLE_TOP ------- singleTop
3、Home键、back、横竖屏切换、锁屏时Activity生命周期
http://blog.csdn.net/tech_universe/article/details/44157095
4、Activity 与Task千丝万缕
task是一个具有栈结构的容器,可以放置多个Activity实例。启动一个应用,系统就会为之创建一个task,来放置根Activity;默认情况下,
一个Activity启动另一个Activity时,两个Activity是放置在同一个task中的,后者被压入前者所在的task栈,当用户按下后退键,后者从task被弹出,
前者又显示在幕前,特别是启动其他应用中的Activity时,两个Activity对用户来说就好像是属于同一个应用;
这一节专门写了一篇:
singlaTask和singleInstance模式 与 startActivityForResult不能共存:
http://blog.csdn.net/androidhuoniao/article/details/6535042
Activity 与 Task 联系
http://blog.csdn.net/liuhe688/article/details/6761337/
activity生命周期实例(不同启动模式)的更多相关文章
- Android Activity生命周期及启动模式
曾经搞过许多东西,再熟练的东西一段时间没有碰都会生疏或忘记.后来体会到写成文档记录下来的重要性,但有些word或ppt记录下来的东西随着时间流逝会丢失,或者不愿去看.或许保存成博客的形式,会是更好的选 ...
- Android体系结构及activity生命周期
Android的系统架构采用了分层架构的思想,如图1所示.从上层到底层共包括四层,分别是应用程序程序层.应用框架层.系统库和Android运行时和Linux内核 Android的系统架构图 每层 ...
- Android Activity生命周期与启动模式
Activity的完整生命周期如下图: Activity的加载模式有四种: standard: 标准模式,默认的加载模式,每次通过这种模式启动目标Acitivity,都创建一个新的实例,并将该Acti ...
- android Activity生命周期(设备旋转、数据恢复等)与启动模式
1.Activity生命周期 接下来将介绍 Android Activity(四大组件之一) 的生命周期, 包含运行.暂停和停止三种状态,onCreate.onStart.onResume.o ...
- android学习笔记 activity生命周期&任务栈&activity启动模式
activity生命周期 完整生命周期 oncreate->onstart->onresume->onpause->onstop->ondestory 使用场景:应用程序 ...
- Android查缺补漏--Activity生命周期和启动模式
一.生命周期 onCreate():启动Activity时,首次创建Activity时回调. onRestart():再次启动Activity时回调. onStart():首次启动Activity时在 ...
- Activity生命周期以及启动模式对生命周期的影响
前天用户体验反馈的一个需求,要求每次进入应用都定位到首页;这个操作很明显不适合放在首页Activity(启动模式为SingleTask)的onResume中,如果对Activity的启动模式和生命周期 ...
- Activity生命周期以及启动模式对生命周期的影响(二)
前面一篇文章概述了Android四大组件之一的Activity生命周期方法的调用先后顺序,但对于非标准启动模式下Activity被多次调用时的一些生命周期方法并未详细阐述,现在针对该情况着重记录. 现 ...
- Android开发之Activity的生命周期以及加载模式
本篇博客就来好好的搞一下Activity的生命周期,如果搞过iOS的小伙伴的话,Activity的生命周期和iOS中ViewController的生命周期非常类似.生命周期,并不难理解.一个人的生命周 ...
随机推荐
- js splice方法
处理数组的方法很多,javascript splice()算是最强大的了,它可以用于插入.删除或替换数组的元素.下面来一一介绍! 1.删除-用于删除元素,两个参数,第一个参数(要删除第一项的位置),第 ...
- python 实现排列组合
1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍. 2.一个列表数据任意组合 2.1主要是利用自带的库 #_*_ coding:utf-8 _*_ #__author__ ...
- Win7_Ultimate + VS2010 + openGL 配置
Win7_Ultimate + VS2010 + openGL 配置 0. 前言 OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. (1)与C语言紧密结合. O ...
- win7系统窗口背景颜色设置为护眼色的方法---打开的任意窗口显示为护眼色,程序眼必备
win7系统窗口背景颜色设置为护眼色的方法 1. 打开"窗口颜色与外观"对话框 方法1:从控制面板开始 控制面板\外观和个性化\个性化\窗口颜色和外观 方法2:桌面上鼠标右键,个性 ...
- 图书助手Alpha版使用说明
一.产品介绍 我们做的是一个基于安卓的手机app,通过连接图书馆的数据库,实现查询图书馆的书目信息的功能. 二.软件运行 我们只做了安卓版本,需要在安卓环境下运行. 三.软件结构 本软件主要包括客户端 ...
- Android中设置分割线
设置分隔线的方法一: 在需要设置分隔线的布局文件中加入如下代码: <View android:layout_width="fill_parent" andr ...
- LeetCode136:Single Number
题目: Given an array of integers, every element appears twice except for one. Find that single one. No ...
- python——排序
从学校毕业出来后只知道冒泡排序,发现自己对排序的了解还是很浅显. 于是在网上搜索各种排序方法,以下是本人根据索搜出来的资料再结合自己理解作出的一些简单的阐述. 如果有不正确的地方欢迎大家指正.(共同学 ...
- 常用到的一些js方法,记录一下
获取字符串长度 function GetStringLength(str) { return str.replace(/[^\x00-\xff]/g, "00").length; ...
- 批处理系列(13) -从视频导出高质量GIF图片
需要ffmpeg,配置ffmpeg到环境变量. 保存代码到HQGIF.bat,与视频同目录,管理员权限运行CMDcd到此目标目录: HQGIF.bat input_video_name.mp4 out ...