【Java与智能设备】Ch0402 Activity的生命周期
场合:用户输入信息没保存的时候有来电,挂断电话后,返回还可以继续编辑
活动栈
维护的是没有被销毁的Activity
- 栈的特点:先进后出
- 栈顶的Activity是活动状态,其他的是暂停状态或停止状态
- 出栈时机:手动结束Activity(非活动状态)
- Android觉得内存不足的时候,会将栈底的Activity进行回收(成为非活动状态),一般栈底的是长期没有使用的
状态
- 活动状态:当前Activity在Activity活动栈中处于最上层,完全能被用户看到,并能够与用户进行交互。
- 暂停状态:当前Activity在界面上被部分遮挡,不再处于用户界面的最上层,不能够与用户进行交互。
- 如果仅仅是弹出对话框,没有新的Activity入栈,则当前Activity还是处于栈顶(活动状态)
- 若启动一个新的Activity(例如以对话框形式展示),则原来的Activity就处于暂停状态。
- 处于暂停状态的Activity仍然保留用户的状态信息,但在系统内存不足时,可能会被系统杀死。
- 停止状态:Activity在界面上完全不能被用户看到,也就是说这个Activity被其他Activity全部遮挡。
- 处于停止状态的Activity,仍然保留用户状态信息,但当系统内存不足时,会优先杀死该类Activity。
- 非活动状态:不在以上三种状态中的Activity,处于非活动状态。
- 被销毁的Activity
状态转换
- 活动 onResume()
- 启动 - 活动:onCreate(),onStart(),onResume()
- 暂停 - 活动:onResume()
- 停止 - 活动:onRestart(),onStart(),onResume()
- 非活动 - 活动:onCreate(),onStart(),onResume()
- 暂停 onPause()
- 活动 - 暂停:onPause()
- 停止 onStop()
- 活动 - 停止:onPause(),onStop()
- 销毁 onDestroy() 非活动状态/被回收
- 活动 - 销毁:onPause(),onStop(),onDestroy()调用finish()的时候执行的就是这三个方法
Activity状态切换时数据保持
新的API版本中可以保存用户编辑的数据,但是切换横竖屏的时候不会保存;切换的时候会调用onDestroy()方法,然后又调用了onCreate()方法
解决:
- 借助onPause( )和onRestart( )回调方法实现。
- 当Activity状态由活动态切换到暂停状态时,可以在onPause( )回调方法,保持持久化数据(可以把数据保存在内存中,或把数据保存在文本、数据库中)。
- 当Activity由暂停状态或停止状态恢复到活动状态时,可以在onRestart( )回调文中,恢复用户所保存的状态数据。
- 借助 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"));}}
onCreate 和 onRestoreInstanceState中都有Bundle参数
- onRestoreInstanceState中的是由onSaveInstanceState中传进来的
Fragment的生命周期
- Fragment不具有在屏幕上显示视图的能力。
- Fragment依赖Activity的存在而存在。
- 在创建Activity时生命周期中的方法先于Fragment生命周期中的方法执行。
- 在销毁Activity时,Fragment生命周期中的方法先于Activity生命周期中的方法执行。
顺序特例:若将Fragment的创建放到onCreate()方法中,则会创建的时候Fragment会先于Activity
【Java与智能设备】Ch0402 Activity的生命周期相关推荐
- Activity的生命周期理解
Activity拥有4个基本状态: 活动状态:当前Activity位于前台,可以看见也可以获得焦点,可以接受用户输入的 暂停状态:其他Activity位于前台,该Activity依然可见,但是不能获得 ...
- android的应用入口点函数,android 没有main函数,怎么找到程序执行入口呢?以及activity主要生命周期的方法说明...
android应用程序,由一到多个Activity组成.每个Activity没有很紧密的联系,因为我们可以在自己的程序中调用其它Activity,特别是调用自己的代码之外生成的Activity,比如a ...
- Activity及其生命周期小结
Activity及其生命周期方法 △概述 Activity,是安卓里与用户交互的组件,通俗点说平时用手机的时候看到的一个个界面就是"Activity"所组成的(当然也有可能会是Fr ...
- Android的Activity之生命周期
Activity 简介 在讲解Activity之前,我先说一下为什么会有Activity这个组件.移动应用体验与桌面体验的不同之处在于,用户与应用的互动并不总是在同一位置开始,而是经常以不确定的方式 ...
- Activity(二)—— Activity的生命周期
Activity的生命周期 1 android任务栈/Task Android中的Activity是可以层叠的.每启动一个新的Activity,就会覆盖在原Activity之上,然后点击Back键会销 ...
- Activity的生命周期方法
一:Activity的生命周期方法 Android提供了很多Activity的生命周期方法,比如我们常用的onCreate.onPause.onResume等.这里主要介绍粗粒度的周期方法,诸如onP ...
- Android笔记之Android基本控件布局与Activity的生命周期
前言 喜欢安卓里千奇百怪的app,酷炫的UI或者好玩的游戏.想知道那些软件是如何做的,为什么我在微博里发一条消息,就能一直存在网上,让别人看到?为什么我点击一个按钮就出现了一个效果,某个功能?为什么滑 ...
- Activity的生命周期与跳转
目录 一.设计目标 二.项目功能说明 1.activity的生命周期oncreate()->onstart()->onResume()->onRestart()->onPous ...
- Android实验二:Activity的生命周期
要求 设计如下界面,包括四个按钮,两个文本框.单击对应按钮可以启动对应activity.假 定Activity A为启动Activity. 部分代码 import androidx.appcompat ...
- android横竖屏切换动画,横竖屏切换时候Activity的生命周期
曾经遇到过一个面试题,让你写出横屏切换竖屏Activity的生命周期.现在给大家分析一下他切换时具体的生命周期是怎么样的: 1.新建一个Activity,并把各个生命周期打印出来 2.运行Activi ...
最新文章
- 淘宝天猫网站停止支持IE6、IE7浏览器,你还在用xp吗?
- 和李洪强一起学设计01 PS第一天
- BeanUtils解决日期问题
- Effective C# 原则11:选择foreach循环
- 窗体的ControlBox属性
- Code On Earth
- 【2018.4.21】模拟赛之二-ssl2403 蜡烛【贪心】
- java音频实时传输_会议室智能系统建设方案,实时远程视频协作
- 全栈工程师薪水_2019Java 全栈工程师 进阶路线图!一定要收藏!
- 软件开发工具比较 c/c++_做自媒体什么剪辑软件好用,分享几个好用的软件,看看你用过几个...
- PSIM软件学习---03 电路的创建与仿真
- 博弈的意思_身处博弈时代,我们更要读些历史
- Map先排序value小->大再排序key小->大,ArrayList与Stream分别实现
- 计算机四级 信息安全工程师——计算机网络题库
- 怎样卸载deepin系统_系统卸载
- 2018.06~7 阅读随笔
- “犯强汉者,虽远必诛!”----遥想伟大汉人当年
- 服务器c盘里会有大量.log文件,电脑C盘爆满怎么办?这3个文件夹放心删,瞬间多出10个G...
- 关于数据导出成excel表
- 手机页面h5的简单demo
热门文章
- (转)区块链:CITA
- 投资中的黑科技知多少?
- Julia:从交易流水动态计算可用资金
- 新品Demo —— ZStack Mini 超融合一体机
- 【优化预测】基于matlab灰狼算法优化BP神经网络预测【含Matlab源码 1729期】
- 【优化算法】人工生态系统优化算法(AEO)【含Matlab源码 023期】
- 【水果蔬菜识别】基于matlab GUI形态学水果蔬菜识别【含Matlab源码 919期】
- 【图像压缩】基于matlab GUI DCT图像无损压缩【含Matlab源码 726期】
- 【图像处理】基于matlab GUI数字图像处理平台【含Matlab源码 381期】
- 赵本山 政治敏锐_每天5分钟保持敏锐的7种方法