一.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. DP之花店橱窗布置

    题目:https://www.smartoj.com/p/1286 分析:花瓶是有序的,花也是有序的,这就保证了有序性,从而满足子解的全局最优,和无后效性.假设dp[i][j]表示前i 朵花,放在前j ...

  2. Ext.net.DirectMethods

    http://www.ext.net.cn/forum.php?mod=viewthread&tid=1282&highlight=directmethod DirectMethod ...

  3. Hibernate 一对一关联映射

    package com.entity; import javax.persistence.Entity; import javax.persistence.OneToOne; @Entity publ ...

  4. WPF常用转换

    原文 WPF常用转换 以下是代码中常常用到的一些转换,整理如下,后续再不断完善: 1.string和Color的转换 //string转Color (Color)ColorConverter.Conv ...

  5. 黑龙江省第七届大学生程序设计竞赛-Mysterious Organization

    描述 GFW had intercepted billions of illegal links successfully. It has much more effect. Today, GFW i ...

  6. 【Cocos2d-x游戏引擎开发笔记(25)】XML解析

    原创文章,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/9128819 XML是一种非常重要的文件格式,由于C++对XML的支持非常完善 ...

  7. PHP - 子类使用父类的构造函数

    /* * 子类使用父类中的构造方法. */ //父类方法 class Person { //父类中的构造方法 function __construct(){ echo '这是父类中的构造方法!'; } ...

  8. boost ini

    #include <boost/property_tree/ptree.hpp>#include <boost/property_tree/ini_parser.hpp> .. ...

  9. C++-struct类的新特性当class用

    #include <iostream> #include <iomanip> #include <string> using namespace std; stru ...

  10. Swift - 使用位运算提取颜色,合并颜色

    通常我们可以使用16进制的格式表示RGB颜色,比如0x2f88c0.通过位操作运算,能很方便的将其中的R,G,B颜色各部分分别提取出来.反之,也可以将R,G,B颜色值组合成一个完整的颜色. 1,提取颜 ...