一.Activiy组件的三个状态:

1.前台状态(active) : 在屏幕的最上层,页面获得焦点,可以响应用户的操作
2.可视状态(paused) : 不能与用户交互,但是还存在于可视区域内,它依然存在内存中,保存着所持有的数据
3.后台状态(stoped) : 已经不在可视区域内,完全被其他Actiivy覆盖,它依然存在内存中,保存着所持有的数据

当Activity处于可视状态(paused)和后台状态(stoped)时,当系统内存不足时候,会被系统销毁其内存,其中保留的数据全部释放清空,只保留一个基本记录在
导航栈中,当再次回到此Activity时,系统会重新从onCreate事件重新运行一遍,以便创建(或者回复)必要的数据

二.Activity7个回调事件
onCreate
onStart
onRestart
onResume
onPause
onStop
onDestroy

三.3个生命周期循环
完整生命周期:onCreate -> onDestroy
可视生命周期:onStart -> onStop
前台生命周期:onResume -> onPause

四.基于生命周期的数据管理
当系统内存不足时,处于【可回收状态】(可视状态和后台状态)下的Activity会被系统回收,其中的数据全部清空,所以基于Activity的生命周期
管理数据,保证数据安全是非常重要的

当系统主动回收Activity所占的内存时,不会照常回调Activity的生命周期事件。
即onStop,onDestroy事件不会被执行

所以为了保证数据安全,需要在onPause时进行数据的保存

protected void onPause()
{
writeData(data);
}

五.基于生命周期的状态管理
每一个用户控件都有属于自己的状态,比如EditText的Text就是最典型的一个,妥善管理控件状态信息,能够提高用户体验

当程序以外中断(电话呼入),onSaveInstanceState事件会被触发,在此事件中可以保存Activity的一些状态信息,事件提供Bundle,以键值对的形式保存状态
这里的Bundle实例不会持久化保存,只是缓存,如果杀掉程序,则无法再被恢复

@Override
protected void onSaveInstanceState(Bundle outState)
{
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
Log.d("test","onSaveInstanceState");
}

与之对应的是

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
Log.d("test", "onRestoreInstanceState");
}

需要注意的是这个两个事件何时回被触发.

onSaveInstanceState事件触发时机:
当activity非用户意愿(比如电话呼入而非Back或finish)被置为可视状态(pause)时候,将会在onPause事件之后调用onSaveInstanceState事件

onRestoreInstanceState事件触发时机:
非用户意愿使得Activity变为可视状态或者后台状态后,又让Activity回到前台状态,是不会触发onRestoreInstanceState事件的,只有
当前Activity真正被系统销毁了,才会发出onRestoreInstanceState事件
将会在onCreate之后触发onRestoreInstanceState事件

六.如何判断一个Activity是新创建的还是被系统回收后再次创建?
1.检测onCreate事件的savedInstanceState字段是否为空

protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState!=null) // 被系统回收,再次创建
{
status = savedInstanceState.getInt(statusStr);
Log.d("test", "status:" + status);
}
else // 首次创建
{ }
}

2.判断onRestoreInstanceState事件是否被触发

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
// 此activity被系统回收,再次创建
}

七.页面跳转与外部事件对Activity生命周期的影响

导航到新Activity ,按下Home按钮 ,关闭手机屏幕,都会依次触发: onPause -> onSaveInstanceState -> onStop

当按下Back按钮回退时候,主动执行finish()时候,会依次触发:     onPause -> onSaveInstanceState -> onStop -> onDestroy

												

Activity组件的生命周期的更多相关文章

  1. Android中各组件的生命周期

    1.Activity生命周期图 二.activity三种状态 (1)active:当Activity运行在屏幕前台(处于当前任务活动栈的最上面),此时它获取了焦点能响应用户的操作,属于活动状态,同一个 ...

  2. Jetpack 架构组件 Lifecycle 生命周期 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. 【老孟Flutter】Stateful 组件的生命周期​

    老孟导读:关于生命周期的文章共有2篇,第一篇是介绍 Flutter 中Stateful 组件的生命周期. 博客地址:http://laomengit.com/blog/20201227/Statefu ...

  4. ReactJS入门(二)—— 组件的生命周期

    如果你熟悉avalon,使用过 data-include-rendered 和 data-include-loaded 等回调方法,那么你会很好地理解React组件的各个生命周期. 说白了其实就是Re ...

  5. React Native 中组件的生命周期

    概述 就像 Android 开发中的 View 一样,React Native(RN) 中的组件也有生命周期(Lifecycle).所谓生命周期,就是一个对象从开始生成到最后消亡所经历的状态,理解生命 ...

  6. 《微信小程序七日谈》- 第三天:玩转Page组件的生命周期

    <微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩 前两篇 ...

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

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

  8. reactjs入门到实战(七)---- React的组件的生命周期

    React的组件的生命周期有三个状态分别是:挂载(生产组件示例化.准备挂载到页面.挂载到页面).更新(更新值.更新DOM).和卸载(卸载后). >>>其他     getInitia ...

  9. Activity完整的生命周期

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

随机推荐

  1. BZOJ 4059: [Cerc2012]Non-boring sequences ( )

    要快速在一段子序列中判断一个元素是否只出现一次 , 我们可以预处理出每个元素左边和右边最近的相同元素的位置 , 这样就可以 O( 1 ) 判断. 考虑一段序列 [ l , r ] , 假如我们找到了序 ...

  2. [转]Centos6.5使用yum安装mysql—配置MySQL允许远程登录

    一.mysql安装 第1步.yum安装mysql[root@stonex ~]#  yum -y install mysql-server安装结果:Installed:    mysql-server ...

  3. IOS SWIFT 网络请求JSON解析 基础一

    前言:移动互联网时代,网络通信已经是手机端必不可少的功能.应用中也必不可少地使用了网络通信,增强客户端与服务器交互.使用NSURLConnection实现HTTP的通信.NSURLConnection ...

  4. mysql入门记录

    mysql -h localhost(or ID) -u root -p show databases; create database <数据库名>: drop database < ...

  5. iOS图片拉伸技巧-李明杰分享

    http://bbs.itcast.cn/thread-21436-1-1.html 本文目录 "一.iOS5.0之前------------------------------------ ...

  6. 深入windows的关机消息截获-从XP到Win7的变化

    之前写了一个软件用于实验室的打卡提醒,其中一个重要的功能是在关机之前提醒当天晚上是否已经打卡.之前我是在WM_ENDSESSION中弹出一个模态对话框来提醒,在XP中基本工作正常,在Win7中大多数时 ...

  7. 海量数据存储之Key-Value存储简介

    Key-value存储简介 具备高可靠性及可扩展性的海量数据存储对互联网公司来说是一个巨大的挑战,传统的数据库往往很难满足该需求,并且很多时候对于特定的系统绝大部分的检索都是基于主键的的查询,在这种情 ...

  8. Codeforces Round #272 (Div. 2)AK报告

    A. Dreamoon and Stairs time limit per test 1 second memory limit per test 256 megabytes input standa ...

  9. React.js学习

    React.js学习之环境搭建 1 工欲善其事必先利其器:前端开发工具 1.1 WebStorm和Sublime Text Sublime Text:作为代码编辑器,Sublime Text的优点如下 ...

  10. 基于Tire树和最大概率法的中文分词功能的Java实现

    对于分词系统的实现来说,主要应集中在两方面的考虑上:一是对语料库的组织,二是分词策略的制订. 1.   Tire树 Tire树,即字典树,是通过字串的公共前缀来对字串进行统计.排序及存储的一种树形结构 ...