位置: 编程技术 - 正文

Activity及其生命周期方法(简述activity的生命周期中有哪几种状态)

编辑:rootadmin
Activity及其生命周期方法

推荐整理分享Activity及其生命周期方法(简述activity的生命周期中有哪几种状态),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:简要叙述activity的生命周期,简单简述activity的生命周期,阐述一下activity的生命周期,简单描述activity的生命周期,activity的作用和生命周期,简述activity的生命周期中有哪几种状态,简述activity的生命周期过程,简单描述activity的生命周期,内容如对您有帮助,希望把文章链接给更多的朋友!

学习笔记,欢迎指导。

窗体简介

△概述:窗体,是安卓里与用户交互的组件,窗体类&#;一个容器,可以装填布局文件,装填可显示的东西,但窗体本身不具备绘图功能。

△创建窗体,两个方法:

→最简单的方法就是直接new出一个窗体(某些开发环境里面有new Activity选项)。

→手工创建:

(1)创建一个Java类,继承Activity,也可继承Activity子类。

(2)配置文件清单内容:增加一个activity标签。标签的name属性是必须的,name=”.你的Activity类名”(注意有一个小数点)。其他可以选择填写。

(3)新建一个布局文件,该布局用作该Activity的界面。

(4)重写Activity里的onCreate()方法,将布局文件与Activity绑定。

解析:其实到了第二步就已经创建完了,不过为了窗体能够显示东西以及正常工作,还要进行后面两步设置。

△启动另外一个窗体:

→通过Intent与startActivity:代码如下:

//第二个参数是要被启动的那一个窗体

Intent intent = new Intent(this, SecondActivity.class);

startActivity(intent);

→startActivityForResult():

当你启动某个窗体且想从被启动那个窗体获取数据,你要通过这个方法启动窗体:代码如下:

private static final THE_REQUEST_CODE = 4;

Intent intent = new Intent(this, SecondActivity.class);

startActivityForResult(intent, THE_REQUEST_CODE);

解析:该方法第二个参数是请求码,下面我会对他进行解释。

现在,你带着一个请求码启动另外一个窗体,而且希望他会返回数据。当他返回数据以后,系统将会回调你的窗体另外一个方法,所以当你调用了

”startActivityForResult()”方法,同时还要覆写如下方法:

protected void onActivityResult(int requestCode, int resultCode, Intent data){

If(resultCode==Activity.RESULT_OK&&requestCode==THE_REQUEST_CODE){

//现在你可以接收并处理数据

}

}

解析:

(1)你的窗体有可能在不同地方启动不同窗体,而且都想得到一些返回数据,但是,所有被启动的窗体返回&#;后,都会回调同个方法,当该方法被回调时,如何区分发送的是哪个请求?就是通过请求码来区分。而返回码,是标志被启动那方是否成功处理你的数据。不是用来区分请求。所以你总要在回调方法里面判断请求码。

(2)返回码:requestCode标识对方是否成功处理请求,如果被启动的方法是被正常返回,返回码==Activity.RESULT_OK(这是系统已定义的一个常量)。

△关闭窗体:

→两个方法关闭窗体:

(1)finish():窗体调用他来关闭自己。

(2)finishActivity():关闭某个指定窗体(指定的那一个窗体是你之前所启动的)。

→虽然你可以在程序里面手动关闭一个窗体,不过,窗体的生命应该由系统进行管理,最好不要人为去管理他,而且,被你手动关闭掉的窗体,是不可以被回退的,就是不在回退栈里。

生命周期

先来一张生命周期全图:

△首先单独介绍一下个别生命周期方法:

→onCreate():

(1)回调时间:仅在窗体被初始化时候。

(2)做些什么:你应当在这里对窗体做初始化,比如绘制布局文件,以及其他一些初始化的设置。

Activity及其生命周期方法(简述activity的生命周期中有哪几种状态)

→onPause():

(1)回调时间:一旦窗体不再获取用户焦点(比如临时弹出了一个对话框、或者当你在操作时突然来了一个电话,或者手机进入休眠),只要一旦离开窗体,他是第一个会被回调的方法。

(2)做些什么:保存一些较重要的用户信息,比如用户操作到一半时突然来了一个电话,接完这个电话之后他就不再继续操作,那他之前如果输入某些有用信息,必须保存。

→onStop():

(1)回调时间:当窗体不再为用户所见(比如有一个新窗体已经完全覆盖原来那个窗体,或者用户回到桌面,或者用户按开机键锁屏),只要你再看不见窗体了,这个方法就会回调。

(2)做些什么:还是保存一些重要用户信息。

→onDestroy():

(1)回调时间:窗体被销毁的时候,一旦该方法被回调,窗体实例就会销毁。

(2)做些什么:释放资源,比如你的窗体启动了一个下载任务,你必须在这里释放与下载有关的所有资源。

强调以下两个生命周期:

△onCreate()与onPause():

→想要正常使用窗体,总是需要覆写某些生命周期方法,然而,你并不是必须实现Activity所有生命周期,但是以下的这两个,你最好总是实现它。

→onCreate():你的窗体首次初始化的时候,这个方法将会调用,你应该在这里进行窗体的初始化(比如绘制布局文件)。

→onPause():一旦用户离开你的窗体,这是首个被调用的方法,你应该在这里进行一些处理(比如保存一些用户输入,想象一下如果用户在你当前窗体输入一些数据,然后这时突然一个电话打来,此时这个方法将被回调,你在这里保存信息,用户希望的当然是当他通话结束之后,这些信息可以不用重新输入)。

△几个操作所涉及的生命周期方法回调:

我们通过以下几个操作感性认识一下生命周期:

→点击屏幕启动窗体:我们看到如下信息:

一个窗体完全运行起来,需要三个生命周期方法回调。

→窗体正常打开以后点回退键,我们看到如下信息:

即在原先的基础上又增加了三个周期。

→点击屏幕启动窗体,这次不点击回退键,点击Home键:

相比起点击回退键,少了一个onDestroy()周期。

→点击屏幕启动窗体,这次不点击任何键,而是启动另外一个窗体,我看到了如下信息:

跟Home键的打印结果一样

→然后我再从第二个窗体回去,我看到了如下信息:

注意:最后三个才是最新增加上的。

△生命周期图里面的几个循环:死记窗体生命周期方法没有很大意义,你注意到,生命周期图里面有几个循环,可以通过生命周期里的几个循环周期进行学习,同时,理解了这几个循环以后,你会明白我刚才的那些操作为什么会回调对应生命周期。

→主要是有三个循环周期:

→entire lifetime(完整周期):一个窗体的完整的生命周期,他是这样子的一个循环:onCreate()→onStart()→onResume()→onPause()→onStop()→onDestroy(),如何得到一个窗体完整周期?点击屏幕打开一个窗体,什么都不做然后就点返回键,就会回调上面几个生命周期方法,当你第二次再打开窗体,又会重新调用onCreate()。

→visible lifetime(可见周期):该周期内窗体对于用户可见,他是这样子的一个过程:

onStart()→onResume()→onPause()→onStop()→onRestart()→onStart(),当被调用onStop(),窗体便不再可见了。如果窗体又重新回到屏幕上端,会从onRestart()开始回调。处于这个循环周期里面,用户可以看见窗体,并且窗体可与用户交互。什么时候会发生这样的循环?当有一个窗体正在运行,你去启动另外一个窗体,再从新的窗体里面退回,就会发生上述循环,不过这时是从onPause()开始走到onStart()。

→foreground lifetime(前台周期):处在这个周期里面,窗体处于其它所有窗体上方,而且获取用户输入焦点。他是这样子的一个过程:onPause()→onResume()。从onResume()到onPause()可能会被频繁调用,因为,当设备进入了休眠状态,或者弹出一个会话,都会调用onPause()。也正由于这个周期里的方法会被频繁调用,所以不要在这一些方法里面进行耗时操作。

△状态

→当窗体处于以下的任一状态,窗体实际上还活着(虽然此时窗体可能并不可见,但窗体的实例没被系统销毁,从Java角度讲,就是对象仍然还在):

→Resumed:回调onResume()方法之后,就会处于这个状态,此时窗体正在屏幕的最上面,并且获取用户焦点。

→Paused:回调onPause()方法以后,就会进入这个状态,此时窗体不在屏幕的最上面(即有另外一个窗体已经获取用户焦点),不过原来窗体仍然可见,就是另外那个窗体没有完全遮住原来那个窗体。此时,该窗体的实例仍然在内存里,保持他的所有状态以及信息,仍隶属于窗体管理器。

→Stopped:回调onStop()方法以后,就会进入这个状态,窗体已经不可见了,即新开的那个窗体已将原来那个窗体完全遮住。此时,窗体实例仍然在内存里,保持他的所有状态以及信息,不过,他已不再隶属于窗体管理器。

→当窗体被paused或stoped时,如果系统运存不足,系统可能调用finish方法结束窗体,或者直接结束整个进程。所以,如果你的窗体进入paused、stoped状态,与数据相关的东西就要额外注意一下。

[安卓]手机管家(一)splash 第一步,SplashActivity1.获取用户客户端版本号,注意manifest里去掉title和权限layout:RelativeLayoutxmlns:android=

ImageView的圆形图片显示

【Android】标签页、计时器、单选按钮、复选按钮 写一个小程序把安卓程序中的几个基础组件的基本用法串联起来。如下图所示:在安卓程序中,一个计时器,一直在不断地计时,每秒弹出一个提示。

标签: 简述activity的生命周期中有哪几种状态

本文链接地址:https://www.jiuchutong.com/biancheng/386064.html 转载请保留说明!

上一篇:方块大动员登陆iOS和Android平台,扫码就可立即体验超流畅的俄罗斯方块手游(方块大作战百科)

下一篇:[安卓]手机管家(一)splash(安卓手机管家怎么关闭)

  • 浅析SQL Server的分页方式 ISNULL与COALESCE性能比较(sql server干嘛的)

    我们看到上述COALESCE合并的结果是可空的而ISNULL不是,有一点点不同。

    (3)COALESCE对列计算时需要持久化

    接下来我们看看二者最大的不同,我们通过计算列并且在其上面创建主键或者非空约束,看看ISNULL和COALESCE的区别

    我们再来看看COALESCE函数来计算列

    很明显我们需要对列进行持久化,通过添加PERSISTED关键字,如下即可。

    我们再来看看一个二者的不同

    我们到这里其实我们可以稍微概括下二者的区别:ISNULL着重于替换,而COALESCE着重于合并。COALESCE显示忽略了NULL并用空字符串填充并压缩,而ISNULL对NULL会用空字符串填充但不会压缩。

    (4)COALESCE函数支持超过两个参数

    对于多个参数输入,ISNULL函数需要嵌套调用,而COALESCE能够处理任何数量,至于上限不知,所以对于多个参数使用COALESCE更加,如下使用多个参数输入。

    SELECT COALESCE(a, b, c, d, e, f, g) FROM dbo.table;

    而对于ISNULL,我们需要这样做

    SELECT ISNULL(a, ISNULL(b, ISNULL(c, ISNULL(d, ISNULL(e, ISNULL(f, g)))))) FROM dbo.table;

    二者最终执行时和利用CASE一样

    (5)COALESCE和ISNULL二者性能比较

    我们来运行如下查询

    我们有查询四个场景:(1)两个参数都为NULL(2)第一个参数为NULL(3)第二个参数为NULL(4)两个参数都为NULL。每个场景测试十次,最终得出如下结果

    从上看出二者性能并未有什么太大差异,我们不需要太担心了吧,当然上述场景并未完全覆盖,至少还是能说明一部分。上述我们得到的结果查看的执行时间,现在我们再来看看二者查询执行计划。

    上述可能不太准确,还和硬件配置有关,也有可能COALESCE的性能差与ISNULL。二者性能应该是没什么很大差异。

    (6)ISNULL和自然语言描述不一致

    为何是和自然语言描述不一致呢?也就是说我们当判断某个值为NULL会做什么,不为NULL再做什么,这时用查询语言SQL描述如下:

    我们用自然语言角度来看,翻译为如果something为NULL我们做什么,这个时候是不一致的。因为在SQL Server中没有布尔值类型,上述我们只能进行如下转换

    (7)利用GUID看看奇葩的ISNULL

    在本节介绍之前我们再来看看一个例子,从而颠覆你的想法,让你发狂。

    SELECT ISNULL(NEWID(), 'JeffckyWang" class="img-responsive" alt="浅析SQL Server的分页方式 ISNULL与COALESCE性能比较(sql server干嘛的)">

    浅析SQL Server的分页方式 ISNULL与COALESCE性能比较(sql server干嘛的)

  • Linux系统调用fsync函数详解(Linux系统调用函数)

    Linux系统调用fsync函数详解(Linux系统调用函数)

  • Win10 Mobile 预览版10586.11现身  升级界面曝光(win10预览版)

    Win10 Mobile 预览版10586.11现身 升级界面曝光(win10预览版)

  • Win8更换桌面主题(壁纸、窗口颜色)的操作步骤(win8系统切换桌面)

    Win8更换桌面主题(壁纸、窗口颜色)的操作步骤(win8系统切换桌面)

  • android adt 最新下载地址23.03(android adapter)

    android adt 最新下载地址23.03(android adapter)

  • 安卓-新浪微博评论(新浪微博 app 安卓)

    安卓-新浪微博评论(新浪微博 app 安卓)

  • 使用Python3制作TCP端口扫描器(pythonista可以制作app吗)

    使用Python3制作TCP端口扫描器(pythonista可以制作app吗)

  • jquery操作ID带有变量的节点实例(jquery添加id属性)

    jquery操作ID带有变量的节点实例(jquery添加id属性)

  • 支付证明单算附件吗
  • 分公司产生的费用怎么报销
  • 更正申报后可以作废吗
  • 上期有留抵进项税额,本期如何转,如何做账
  • 一般纳税人可以开1%的发票吗
  • 退货折价的账务处理分录
  • 设计服务需要交文化建设费吗
  • 企业资产重组是不定期清查吗
  • 国库存款利息收入计入哪个预算收入科目
  • 价外补贴需要交增值税吗
  • 坏账损失的核算方法一般有两种
  • 税收优惠退回的税金怎么入账
  • 公司茶水间备的零食该计入什么会计科目核算?
  • 持有营业执照
  • 进项税额转出其他应收款
  • 继承安置房需要过户吗?
  • 一般纳税人认定书
  • 航天信息300元是什么费用
  • 学校有税号可以收专票吗
  • 浅析税收滞纳金问题的政策法规
  • 存货的核算心得体会
  • 积分现金兑换比例怎样计算
  • 股票现金分红
  • 一个月的销售额
  • 盘亏机器设备会计分录
  • 贸易公司成本怎么计算
  • win10开机强制进入
  • 企业清算所得税如何计算
  • ui.exe啥意思
  • 教育经费地方出多少
  • 生产成本结转怎么登账
  • 资产负债表申报怎么填
  • 车险开的发票里有代收车船税吗
  • 累计折旧是当月提还是下月提
  • 发票替票该怎么做账
  • 深入理解计算机系统
  • 15个postgresql数据库实用命令分享
  • 增值税普通发票查询真伪
  • 上市公司限制性股票个人所得税
  • 有限公司股权转让需要股东会决议吗
  • 委外研发费用如何界定
  • 单位保险柜里都放些什么
  • 工业企业外购存货成本有
  • 专项应付款能转出吗
  • 贷款损失准备核销
  • 融资租赁固定资产利息的账务处理实例
  • 预提费用处理
  • 成本核算的意义在于
  • 购买方账务处理
  • 固定资产清理明细账采用什么账簿
  • mssql server 2012(SQL2012)各版本功能对比
  • win7一键升级到win10
  • ubuntu 安装指定位置
  • ibm笔记本开机进不去系统
  • 电脑删除ie后怎么恢复
  • 资源管理器 windows
  • 用centos搭建服务器的详细教程
  • WIN10系统睡眠后点不动
  • mac上安装
  • cocos2dx官方教程
  • 在win7上加装一个硬盘不显示
  • jquery插件大全
  • Android与OpenCV2.4.4(2013最新)搭建图像处理框架
  • 基于像素的分类方法
  • 安卓图片缓存太占空间
  • 安卓开发过程中的问题
  • 网络自定义怎么打开
  • css样式分为
  • android intent作用
  • javascript第二章上机怎么写
  • jquery td
  • python3 django教程
  • js滚动条怎么调出来
  • 深入理解python递归
  • 关于草丛:单局游戏内
  • jquery自动点击按钮
  • js 原型方法
  • js过滤html代码
  • 小规模纳税人企业所得税2023税率
  • 如何连续打印单据
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设