场合:用户输入信息没保存的时候有来电,挂断电话后,返回还可以继续编辑

活动栈

维护的是没有被销毁的Activity

  1. 栈的特点:先进后出
  2. 栈顶的Activity是活动状态,其他的是暂停状态或停止状态
  3. 出栈时机:手动结束Activity(非活动状态)
  4. Android觉得内存不足的时候,会将栈底的Activity进行回收(成为非活动状态),一般栈底的是长期没有使用的

状态

  1. 活动状态:当前Activity在Activity活动栈中处于最上层,完全能被用户看到,并能够与用户进行交互。
  2. 暂停状态:当前Activity在界面上被部分遮挡,不再处于用户界面的最上层,不能够与用户进行交互。
    • 如果仅仅是弹出对话框,没有新的Activity入栈,则当前Activity还是处于栈顶(活动状态)
    • 若启动一个新的Activity(例如以对话框形式展示),则原来的Activity就处于暂停状态。
    • 处于暂停状态的Activity仍然保留用户的状态信息,但在系统内存不足时,可能会被系统杀死。
  3. 停止状态:Activity在界面上完全不能被用户看到,也就是说这个Activity被其他Activity全部遮挡。
    • 处于停止状态的Activity,仍然保留用户状态信息,但当系统内存不足时,会优先杀死该类Activity。
  4. 非活动状态:不在以上三种状态中的Activity,处于非活动状态。
    • 被销毁的Activity

状态转换


  1. 活动 onResume()
  • 启动 - 活动:onCreate(),onStart(),onResume()
  • 暂停 - 活动:onResume()
  • 停止 - 活动:onRestart(),onStart(),onResume()
  • 非活动 - 活动:onCreate(),onStart(),onResume()
  1. 暂停 onPause()
  • 活动 - 暂停:onPause()
  1. 停止 onStop()
  • 活动 - 停止:onPause(),onStop()
  1. 销毁 onDestroy() 非活动状态/被回收
  • 活动 - 销毁:onPause(),onStop(),onDestroy()调用finish()的时候执行的就是这三个方法


Activity状态切换时数据保持

新的API版本中可以保存用户编辑的数据,但是切换横竖屏的时候不会保存;切换的时候会调用onDestroy()方法,然后又调用了onCreate()方法
解决:

  1. 借助onPause( )和onRestart( )回调方法实现。
  • 当Activity状态由活动态切换到暂停状态时,可以在onPause( )回调方法,保持持久化数据(可以把数据保存在内存中,或把数据保存在文本、数据库中)。
  • 当Activity由暂停状态或停止状态恢复到活动状态时,可以在onRestart( )回调文中,恢复用户所保存的状态数据。
  1. 借助 onSaveInstanceState( ) 和 onRestoreInstanceState( ) 方法实现
  • 当Activity由活动状态切换到暂停状态或停止状态时,会自动调用onSaveInstanceState( )方法,把用户状态数据保存到Bundle对象中(若用户点击"返回"键退出当前Activity,则此时不会调用该方法)。
  • 当Activity的onStart( )回调方法调用结束后,会自动调用**onRestoreInstanceState( )**方法,恢复用户在Bundle对象中所保存的状态数据
 @Overridepublic void onSaveInstanceState(@NonNull Bundle outState, @NonNull PersistableBundle outPersistentState) {Log.e("MainActivity","onSaveInstanceState");super.onSaveInstanceState(outState, outPersistentState);//保存用户数据outState.putString("msg",etMsg.getText().toString());}//保存了哪些就会恢复哪些@Overrideprotected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {Log.e("MainActivity","onRestoreInstanceState");super.onRestoreInstanceState(savedInstanceState);//恢复用户数据String content = savedInstanceState.getString("msg");//显示到界面etMsg.setText(content);if (null != savedInstanceState){Log.e("onCreate", savedInstanceState.getString("msg"));}}
  1. onCreate 和 onRestoreInstanceState中都有Bundle参数

    • onRestoreInstanceState中的是由onSaveInstanceState中传进来的

Fragment的生命周期

  1. Fragment不具有在屏幕上显示视图的能力。
  2. Fragment依赖Activity的存在而存在。
  3. 在创建Activity时生命周期中的方法先于Fragment生命周期中的方法执行。
  4. 在销毁Activity时,Fragment生命周期中的方法先于Activity生命周期中的方法执行。

顺序特例:若将Fragment的创建放到onCreate()方法中,则会创建的时候Fragment会先于Activity

【Java与智能设备】Ch0402 Activity的生命周期相关推荐

  1. Activity的生命周期理解

    Activity拥有4个基本状态: 活动状态:当前Activity位于前台,可以看见也可以获得焦点,可以接受用户输入的 暂停状态:其他Activity位于前台,该Activity依然可见,但是不能获得 ...

  2. android的应用入口点函数,android 没有main函数,怎么找到程序执行入口呢?以及activity主要生命周期的方法说明...

    android应用程序,由一到多个Activity组成.每个Activity没有很紧密的联系,因为我们可以在自己的程序中调用其它Activity,特别是调用自己的代码之外生成的Activity,比如a ...

  3. Activity及其生命周期小结

    Activity及其生命周期方法 △概述 Activity,是安卓里与用户交互的组件,通俗点说平时用手机的时候看到的一个个界面就是"Activity"所组成的(当然也有可能会是Fr ...

  4. Android的Activity之生命周期

    Activity 简介  在讲解Activity之前,我先说一下为什么会有Activity这个组件.移动应用体验与桌面体验的不同之处在于,用户与应用的互动并不总是在同一位置开始,而是经常以不确定的方式 ...

  5. Activity(二)—— Activity的生命周期

    Activity的生命周期 1 android任务栈/Task Android中的Activity是可以层叠的.每启动一个新的Activity,就会覆盖在原Activity之上,然后点击Back键会销 ...

  6. Activity的生命周期方法

    一:Activity的生命周期方法 Android提供了很多Activity的生命周期方法,比如我们常用的onCreate.onPause.onResume等.这里主要介绍粗粒度的周期方法,诸如onP ...

  7. Android笔记之Android基本控件布局与Activity的生命周期

    前言 喜欢安卓里千奇百怪的app,酷炫的UI或者好玩的游戏.想知道那些软件是如何做的,为什么我在微博里发一条消息,就能一直存在网上,让别人看到?为什么我点击一个按钮就出现了一个效果,某个功能?为什么滑 ...

  8. Activity的生命周期与跳转

    目录 一.设计目标 二.项目功能说明 1.activity的生命周期oncreate()->onstart()->onResume()->onRestart()->onPous ...

  9. Android实验二:Activity的生命周期

    要求 设计如下界面,包括四个按钮,两个文本框.单击对应按钮可以启动对应activity.假 定Activity A为启动Activity. 部分代码 import androidx.appcompat ...

  10. android横竖屏切换动画,横竖屏切换时候Activity的生命周期

    曾经遇到过一个面试题,让你写出横屏切换竖屏Activity的生命周期.现在给大家分析一下他切换时具体的生命周期是怎么样的: 1.新建一个Activity,并把各个生命周期打印出来 2.运行Activi ...

最新文章

  1. 淘宝天猫网站停止支持IE6、IE7浏览器,你还在用xp吗?
  2. 和李洪强一起学设计01 PS第一天
  3. BeanUtils解决日期问题
  4. Effective C# 原则11:选择foreach循环
  5. 窗体的ControlBox属性
  6. Code On Earth
  7. 【2018.4.21】模拟赛之二-ssl2403 蜡烛【贪心】
  8. java音频实时传输_会议室智能系统建设方案,实时远程视频协作
  9. 全栈工程师薪水_2019Java 全栈工程师 进阶路线图!一定要收藏!
  10. 软件开发工具比较 c/c++_做自媒体什么剪辑软件好用,分享几个好用的软件,看看你用过几个...
  11. PSIM软件学习---03 电路的创建与仿真
  12. 博弈的意思_身处博弈时代,我们更要读些历史
  13. Map先排序value小->大再排序key小->大,ArrayList与Stream分别实现
  14. 计算机四级 信息安全工程师——计算机网络题库
  15. 怎样卸载deepin系统_系统卸载
  16. 2018.06~7 阅读随笔
  17. “犯强汉者,虽远必诛!”----遥想伟大汉人当年
  18. 服务器c盘里会有大量.log文件,电脑C盘爆满怎么办?这3个文件夹放心删,瞬间多出10个G...
  19. 关于数据导出成excel表
  20. 手机页面h5的简单demo

热门文章

  1. (转)区块链:CITA
  2. 投资中的黑科技知多少?
  3. Julia:从交易流水动态计算可用资金
  4. 新品Demo —— ZStack Mini 超融合一体机
  5. 【优化预测】基于matlab灰狼算法优化BP神经网络预测【含Matlab源码 1729期】
  6. 【优化算法】人工生态系统优化算法(AEO)【含Matlab源码 023期】
  7. 【水果蔬菜识别】基于matlab GUI形态学水果蔬菜识别【含Matlab源码 919期】
  8. 【图像压缩】基于matlab GUI DCT图像无损压缩【含Matlab源码 726期】
  9. 【图像处理】基于matlab GUI数字图像处理平台【含Matlab源码 381期】
  10. 赵本山 政治敏锐_每天5分钟保持敏锐的7种方法