转载注明来自:  http://www.cnblogs.com/wujiancheng/

一、正常情况下Activity的生命周期:

 Activity的生命周期大概可以归为三部分

整个的生命周期:onCreate()可以设置所有的“全局”状态, onDestory()可以释放所有的资源

可见的生命周期:onStart()显示给用户的UI数据和资源等, onStop()当不再需要显示时候,可以释放资源

前台的生命周期:该生命周期活跃,onResume()回到前台,onPause()不可见状态或被覆盖

不要在onCreate()方法中执行耗时的操作,onStart()及onResume()不可进行过多操作,不然打开桌面应用图标会卡顿。

(1)onCreate:表示Activity正在被创建。可以调用setContentView加载布局资源、初始化各控件、设置监听、并初始化一些全局的变量。因为在Activity的一次生命周期中,onCreate方法只会执行一次。在Paused和Stopped状态下恢复或重启的下,这些控件、监听和全局变量也不会丢失。即便是内存不足,被回收了,再次Recreate的话,又是一次新的生命周期的开始,又会执行onCreate方法。

(2)onRestart:表示Activity正在重新启动。当处于非栈顶状态的活动需要再次返回栈顶,展现给用户的时候,触发该方法。调用的场景主要有:home键之后,然后切换回来、Activity跳转到另一个Activity之后,按back键返回原来Activity。很少调用,因为它只在onStop之后才可能调用,所以操作放在onStart方法里面就比较好。

(3)onStart:表示Activity正在启动,这时Activity已经可见,但是还没有出现在前台,还无法和用户交互。

(4)onResume:表示Activity已经可见了,并且出现在前台并开始活动。

(5)onPause:表示Activity正在停止,正常情况下,onStop会接着调用,但是打开的是透明的Activity,不会调用onStop,返回会调用onResume。可以执行一些轻量级的释放工作(耗时会影响到新的Activity显示,onPause必须执行完,新Activity的生命周期才会执行)例如:停止动画、取消broadcast receivers等。

(6)onStop:表示Activity将要停止,极有可能被系统所回收,在某些极端情况下,系统可能是直接杀死应用程序的进程,而不是调用onDestory方法,所以我们需要在onStop方法中尽可能的释放那些用户暂时不需要使用的资源,防止内存泄露。可以做一些稍微重量级的回收工作,例如:数据保存,需要用到的数据库操作。

(7)onDestory:表示Activity将被销毁,确定某些资源是否没有被释放,做一些最终的清理工作,比如在这个Activity的onCreate中开启的某个线程,那么就要在onDestory中确定它是否结束了,如果没有,就结束它。

几种生命周期流程的情况:

 (1)现在有两个Activity,A 和B,都重写了所有的生命周期方法。

进入A,回调:AonCreate-->AonStart-->AonResume。返回桌面:AAonPause-->AonStop。

点击按钮进入B,回调:AonPause-->BonCreate-->BonStart-->BonResume-->AonStop。

按下back键,回调:BonPause-->AonRestart-->AonStart-->AonResume-->BonStop-->BonDestory

(2)启动对话框样式的Activity,有两个Activity,A
和B(对话框式Activity)。

从A进入B,回调:AonPause-->BonCreate-->BonStart-->BonResume
,并不会调用onStop。

按下back键,BonPause-->AonRestart-->AonStart-->AonResume-->BonStop-->BonDestory回调:BonPause-->AonResume-->BonStop-->BonDestory。

启动对话框并不会有生命周期的变化,这里启动的是透明主题的Activity。

二、关于SaveStateInstance



   系统配置发生改变后或内存瓶颈时,生命周期发生异常,会调用onSaveInstanceState和onRestoreInstanceState这两兄弟,这就很好的解决Android应用的内存问题



旋转屏幕时,生命周期大概如下图(若不想,可在清单文件设置android:configChanges="orientation|keyboardHidden|locale"):

onSaveInstanceState:在Activity(onStop之前)被回收之前,系统会调用onSaveInstanceState(Bundle outState)来保存View的状态,并到传入的outState对象中。

 
onRestoreInstanceState:
在Activity被重新创建时,会通过onCreate(Bundle
savedInstanceState)和onRestoreInstanceState(Bundle
savedInstanceState)传入保存的状态信息并恢复View的状态。(onCreate主要重建Fragment、onRestoreInstanceState恢复Window状态)

 
View控件的状态被保存需要满足两个条件:

1、View有唯一的ID;

2、View的初始化时要调用setSaveEnabled(true)

 
View控件恢复的注意三点:

1、如果id重复,则View的状态会被覆盖

2、被保存的Fragment会在onCreate中被自动创建和添加到FragmentActivity中

3、被保存的View不会被自动创建,只是通过id获取savedInstance用于更新View

详解Android Activity---Activity的生命周期的更多相关文章

  1. 详解服务器性能测试的全生命周期?——从测试、结果分析到优化策略(转载)

    服务器性能测试是一项非常重要而且必要的工作,本文是作者Micheal在对服务器进行性能测试的过程中不断摸索出来的一些实用策略,通过定位问题,分析原因以及解决问题,实现对服务器进行更有针对性的优化,提升 ...

  2. android Fragments详解六:处理fragement的生命周期

    把条目添加到动作栏 你的fragment们可以向activity的菜单(按Manu键时出现的东西)添加项,同时也可向动作栏(界面中顶部的那个区域)添加条目,这都需通过实现方法onCreateOptio ...

  3. 详解 Android 的 Activity 组件

    Activity 的生命周期 和 J2ME 的 MIDlet 一样,在 android 中,Activity 的生命周期交给系统统一管理.与 MIDlet 不同的是安装在 android 中的所有的 ...

  4. Java Servlet详解(体系结构+注解配置+生命周期)

    Java Servlet详解(注解配置+生命周期) 什么是Servlet : (Server applet)? 顾名思义:服务端的小程序 Servlet只是一个接口,定义了Java被浏览器访问到(To ...

  5. 详解Vue 实例中的生命周期钩子

    Vue 框架的入口就是 Vue 实例,其实就是框架中的 view model ,它包含页面中的业务处理逻辑.数据模型等,它的生命周期中有多个事件钩子,让我们在控制整个Vue实例的过程时更容易形成好的逻 ...

  6. 详解 Android Activity 生命周期

    从以下几个方面详细说一下Activity的生命周期: 1.回到主屏幕再打开和退出程序的时候. 2.屏幕旋转的时候. 3.打开其它的Activity的情况. 4.打开一个Layou透明的Activity ...

  7. 详解Android中的四大组件之一:Activity详解

    activity的生命周期 activity的四种状态 running:正在运行,处于活动状态,用户可以点击屏幕,是将activity处于栈顶的状态. paused:暂停,处于失去焦点的时候,处于pa ...

  8. 详解Android Activity启动模式

    相关的基本概念: 1.任务栈(Task)   若干个Activity的集合的栈表示一个Task.   栈不仅仅只包含自身程序的Activity,它也可以跨应用包含其他应用的Activity,这样有利于 ...

  9. Android Small插件化框架解读——Activity注册和生命周期

    通过对嵌入式企鹅圈原创团队成员degao之前发表的<Android Small插件化框架源码分析>的学习,对Android使用的插件化技术有了初步的了解,但还是有很多需要认真学习的地方,特 ...

  10. Activity完整的生命周期

    首语:群里看到一位网友说:你能说出Activity的完整生命周期吗?看到这句话,我也在反思自己,我也是个fresh,所以想找个时间仔细的扒一扒Activity生命周期. 首先拿一张简单而又复杂的生命周 ...

随机推荐

  1. java 与操作系统同步问题(三)————父亲儿子女儿水果问题

    问题描述:父亲每次都会放一个水果在桌子上,女儿喜欢吃香蕉(只吃香蕉), 儿子喜欢吃苹果(只吃苹果).父亲每次只会随机往桌子上放一个水果(苹果或香蕉),儿子,女儿会来取.使用p.v操作来完成父亲.儿子. ...

  2. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  3. Java对【JSON数据的解析】--Gson解析法

    Gson和fastjson分别为谷歌和阿里巴巴对JSON数据进行处理封装的jar包 两者异同点: 相同点:都是根据JSON数据创建相应的类 不同点: 1.调用方式区别 谷歌:方法都是非静态的,需要先创 ...

  4. [转]tomcat部署

    转载博客原文地址:  http://www.cnblogs.com/xing901022/p/4463896.html 阅读目录 介绍 静态部署——在tomcat启动时部署 动态部署——在tomcat ...

  5. mysql之 MySQL 主从复制概述

    1 .主从复制简介MySQL 主从复制就是将一个 MySQL 实例(Master)中的数据实时复制到另一个 MySQL 实例(slave)中,而且这个复制是一个异步复制的过程.实现整个复制操作主要由三 ...

  6. java原生实现屏幕设备遍历和屏幕采集(捕获)等功能

    前言:本章中屏幕捕获使用原生java实现,屏幕图像显示采用javacv1.3的CanvasFrame 一.实现的功能 1.屏幕设备遍历 2.本地屏幕图像采集(也叫屏幕图像捕获) 3.播放本地图像(采用 ...

  7. javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

  8. java中调用本地动态链接库(*.DLL)的两种方式详解和not found library、打包成jar,war包dll无法加载等等问题解决办法

    我们经常会遇到需要java调用c++的案例,这里就java调用DLL本地动态链接库两种方式,和加载过程中遇到的问题进行详细介绍 1.通过System.loadLibrary("dll名称,不 ...

  9. selenium+python浏览器窗口的切换

    1.首先需要知道当前浏览器中有多少个活动的窗口 >>> br.window_handles[u'{075a54ee-3d10-4c76-b56d-b645259bbd54}', u' ...

  10. Mac远程连接windows报错“证书或相关链无效,是否仍要连接到此计算机”的处理办法。

    这个主要是因为策略组设置的问题.详细的设置方法如下: 本地计算机策略>计算机配置>管理模板>windows组件>远程桌面服务>远程桌面会话主机>安全>远程(R ...