已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android移动应用设计与开发 第4章Activity以及Intent通信机制 4 1Activity生命周期4 1 1Activity交互机制4 1 2Activity状态4 1 3Activity生命周期的事件回调方法4 2Intent4 2 1Intent属性4 2 2Intent解析4 2 3Activity的跳转 本章导读 4 1Activity生命周期 在Android应用程序中 所有的Android组件都有它自己的生命周期 表示从这一组件的创建到销毁的整个过程 在这一过程中 组件会在活动 非活动以及可见或不可见等状态中不断因应用场景的改变而进行切换 这一小节中 我们将对Android系统中Activity组件的生命周期进行详细的介绍 4 1 1Activity交互机制 Android针对Activity的管理使用的是栈机制 Activity栈保存了已经启动并且没有终止的Activity 并遵循 先进后出 的原则具体说明 在某个时刻只有一个Activity处在栈顶 当这个Activity被销毁后 下面的Activity才可能处于栈顶 或者是有一个新的Activity被创建出来 则上一个Activity就被压栈下去Android按照一种层次管理所有的Activity 因为Activity是直接涉及到与用户交互界面的处理 而任意时刻与用户交互的界面只有一个 所以Android针对Activity的管理采用了具有层次感的栈的数据结构 4 1 2Activity状态 Active running 此时Activity一定处于屏幕的最前端 用户完全可以看得到 并且可以与用户进行交互 对于Activity栈来说 它处于栈顶 Paused Activity在屏幕上仍然可见 但是它已经失去了焦点 用户不能与之进行交互 暂停状态的Activity是存活的 它维持着其内部状态和信息 但是系统可能会在手机内存极低的情况下杀掉该Activity Stop Activity在屏幕上完全不能被用户看见 这个Activity已经完全被其他Activity所遮住 系统仍然保留有其内部状态和成员信息 但是它经常会由于手机系统内存被征用而被系统杀死回收 Killed Activity被系统杀死回收或者未启动 4 1 2Activity状态 四种状态的转换关系如图4 1所示 图4 1Activity的4种状态之间的转换图 Activity启动后处于Active Running状态 此时Activity处于屏幕的最上面当用户启动了新的Activity 并且此Activity部分遮挡了当前的Activity或拥有透明属性时 则当前的Activity转换为Paused状态 也可以从Paused状态到Active Running状态当用户启动的Activity完全遮住了当前的Activity时 则当前的Activity转换为Stop状态处于Stop状态的Activity 当手机系统内存被其他应用程序征用时 Stop状态的Activity将首先被杀死 进入Killed状态 Active Running状态的Activity被用户终止或是Paused状态及Stop状态的Activity被系统终止后 Activity进入了Killed状态 4 1 3Activity生命周期的事件回调方法 4 1 3Activity生命周期的事件回调方法 事件回调方法种类 Android生命周期的事件回调方法如下 voidonCreate BundlesavedInstanceState voidonStart voidonRestart voidonResume voidonPause voidonStop voidonDestroy 注意 1 所有的Activiy都必须实现onCreate 方法 在该方法中可以对Activity进行一些初始化设置 2 所有的Activity生命周期方法的实现都必须先调用其父类的方法 4 1 3Activity生命周期的事件回调方法 Android生命周期分类 全生命周期 可视生命周期 前台生命周期 全生命周期自第一次调用onCreate 开始 直至调用onDestroy 为止Activity在onCreate 中设置所有 全局 状态以完成初始化在onDestroy 中释放所有系统资源 可视生命周期onStart 开始到onStop 结束在此期间 用户可以在屏幕上看到该Activity在这两个方法中 你可以管理该Activity的资源可以在onStart 中注册一个BroadcastReceiver来监控UI变化 而在onStop 中取消该注册 前台生命周期自onResume 调用开始 至相应的onPause 调用为止在此期间 Activity位于前台最上面 可与用户进行交互当设备转入休眠状态或有新的Activity启动时 将调用onPause 方法当Activity接收到新的Intent的时候会调用onResume 方法 4 1 3Activity生命周期的事件回调方法 Activity生命周期过程及状态改变 说明 1 椭圆是Activity可以经历的主要状态 2 矩形框代表了当Activity在状态间发生改变的时候 我们进行操作所要实现的回调方法 4 1 3Activity生命周期的事件回调方法 Activity生命周期过程及状态改变 4 1 3Activity生命周期的事件回调方法 Activity生命周期过程及状态改变 4 1 3Activity生命周期的事件回调方法 Activity生命周期过程及状态改变 注意 与前面所讲的7种方法不同 onSaveInstanceState 和onRestoreInstanceState 并不是生命周期方法 它们并不是总会被调用 4 1 3Activity生命周期的事件回调方法 实例 packagecom androidbook activitylife importandroid app Activity importandroid content Intent importandroid os Bundle importandroid util Log importandroid view View importandroid view View OnClickListener importandroid widget Button publicclassActivity1extendsActivity Calledwhentheactivityisfirstcreated privatestaticfinalStringTAG Activity1 一个完整生命周期开始时被调用 初始化Activity OverridepublicvoidonCreate BundlesavedInstanceState super onCreate savedInstanceState setContentView R layout main Log e TAG onCreate Buttonbutton Button findViewById R id button button setText 进入Activity2 ButtonotherButton Button findViewById R id otherbutton otherButton setText 进入Activity3 弹出对话框 button setOnClickListener newOnClickListener OverridepublicvoidonClick Viewv TODOAuto generatedmethodstubIntentintent newIntent Activity1 this Activity2 class startActivity intent otherButton setOnClickListener newOnClickListener OverridepublicvoidonClick Viewv TODOAuto generatedmethodstubIntentintent newIntent Activity1 this Activity3 class startActivity intent 4 1 3Activity生命周期的事件回调方法 实例 可视生命周期开始时被调用 OverrideprotectedvoidonStart TODOAuto generatedmethodstubsuper onStart Log e TAG onStart 在onStart 后被调用 用于恢复UI信息 OverrideprotectedvoidonRestoreInstanceState BundlesavedInstanceState TODOAuto generatedmethodstub 从savedInstanceState恢复UI状态 Bundle对象同样在onCreate方法中被传入 super onRestoreInstanceState savedInstanceState Log e TAG onRestoreInstanceState OverrideprotectedvoidonResume TODOAuto generatedmethodstub 在前台生命周期开始时被调用 恢复被onPause 停止的用于界面更新的资源 super onResume Log e TAG onResume 在onResume 之后被调用 用于保存界面信息 OverrideprotectedvoidonSaveInstanceState BundlesavedInstanceState TODOAuto generatedmethodstub 保存UI状态变化到savedInstanceState中 当进程被杀死或重启时这个Bundle会传入到onCreate方法 super onSaveInstanceState savedInstanceState Log e TAG onSaveInstanceState 重新进入可视界面前被调用 这个Activity已经出现过 OverrideprotectedvoidonRestart TODOAuto generatedmethodstubsuper onRestart Log e TAG onRestart 在前台生命周期结束时被调用 用来保存持久的数据或释放占用的资源 4 1 3Activity生命周期的事件回调方法 实例 OverrideprotectedvoidonPause TODOAuto generatedmethodstubsuper onPause Log e TAG onPause 在可视生命周期结束时被调用 保存数据和状态变化 OverrideprotectedvoidonStop TODOAuto generatedmethodstubsuper onStop Log e TAG onStop 在整个生命周期结束时被调用 清除任何资源 包括结束线程 关闭数据库连接等 OverrideprotectedvoidonDestroy TODOAuto generatedmethodstubsuper onDestroy Log e TAG onDestroy 4 1 3Activity生命周期的事件回调方法 实例 实例情况分析 4 1 3Activity生命周期的事件回调方法 实例 1 一个Activity Activity1 启动Activity1 下图为用户看到的界面 4 1 3Activity生命周期的事件回调方法 实例 1 一个Activity Activity1 Activity1的操作详情如下所示 4 1 3Activity生命周期的事件回调方法 实例 2 两个Activity Activity1和Activity2 由Activity1 Activity2 Activity2完全覆盖Activity1 下图为用户看到的界面 4 1 3Activity生命周期的事件回调方法 实例 2 两个Activity Activity1和Activity2 Activity1和Activity2的操作详情如下所示 4 1 3Activity生命周期的事件回调方法 实例 3 两个Activity Activity1和Activity3 Activity1 Activity3 此时的Activity3并不完全覆盖Activity1 也就是前面所说的暂停状态 这时的Activity3是以对话框的形式出现的 如下图所示 4 1 3Activity生命周期的事件回调方法 实例 3 两个Activity Activity1和Activity3 Activity1和Activity3的操作详情如下所示 4 2Intent Intent是一个动作的完整描述 包含了产生组件 接收组件和传递数据信息 并且 Intent利用消息实现应用程序之间的交互机制 这种消息描述了应用中一次操作的动作 数据以及附加数据 系统通过该Intent的描述负责找到对应的组件 并将Intent传递给调用的组件 完成组件的调用 4 2 1Intent属性 Intent由动作 数据 分类 类型 组件和扩展信息等内容组成 每个组成都由相应的属性进行表示 并提供设置和获取相应属性的方法 4 2 1Intent属性 1 ActionAction属性用于描述Intent要完成的动作 对要执行的动作进行一个简要描述 Action属性常量如下表所示 4 2 1Intent属性 2 DataData属性是执行动作的URI和MIME类型 Data属性常量如下表所示 4 2 1Intent属性 3 Action和Data匹配使用不同的Action由不同的Data数据指定 见下表所示 4 2 1Intent属性 4 CategoryCategory属性指明一个执行Action的分类 Intent中定义了一系列Category属性常量 如下表所示 4 2 1Intent属性 5 Component Component属性用于指明Intent目标组件的类名称如果没有指定了Component这个属性 通常Android会根据Intent中包含的其他属性的信息 比如Action Data Type Category进行查找 最终找到一个与之匹配的目标组件如果指定了Component这个属性 Intent则会直接根据组件名查找到相应的组件 而不再执行上述查找过程指定Component属性后 Intent的其他属性都是可选的 4 2 1Intent属性 6 Extra Extra属性用于添加一些附加信息 例如发送一个邮件 就可以通过Extra属性来添加主题 subject 和内容 body 通过使用Intent对象的putExtra 方法来添加附加信息 将一个人的姓名附加到Intent对象中 代码如下所示 Intentintent newIntent ntent putExtra name zhangshan 通过使用Intent对象的getXXXExtra 方法可以获取附加信息 例如 将上面代码存入Intent对象中的人名获取出来 因存入的是字符串 所以可以使用getStringExtra 方法获取数据 代码为 Stringname intent getStringExtra name 4 2 2Intent解析 根据Intent寻找目标组件时所采用的方式不同 可以将Intent分为两类 直接Intent和间接Intent 1 直接Intent直接Intent通过直接指定组件来实现 常用方法有setComponent setClassName 或setClass 如下示例 创建一个Intent对象Intentintent newIntent 指定Intent对象的目标组件是Activity2intent setClass Activity1 this Activity2 class 4 2 2Intent解析 通过IntentFilter过滤实现 过滤时通常根据Action Data和Category属性进行匹配查找 Android提供了两种生成IntentFilter的方式 一种是通过IntentFilter类生成 另一种通过在配置文件AndroidManifest xml中定义元素生成 在AndroidManifest xml配置文件中 IntentFilter以元素来指定 一个组件中可以有多个元素 每个元素描述不同的能力 如下示例 2 间接Intent 4 2 2Intent解析 A 子元素 注意 列表中的Action属性不能为空 否则所有的Intent都会因匹配失败而被阻塞 所以一个元素下至少需要包含一个子元素 这样系统才能处理Intent消息 标签中常用 和这些子元素 分别对应Intent中的Action Data和Category属性 用于对Intent进行匹配 一个中可以添加多个子元素 如下所示 4 2 2Intent解析
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 施工现场心理健康辅导方案
- 建筑物安全性检测技术交底
- 生态补偿绩效评估与改进方案
- 诊所库房工作制度范本大全
- 调度员夜班值班工作制度
- 质量管理部保密工作制度
- 资助贫困小学生工作制度
- 超市理货员工作制度流程
- 铝厂驻厂工作制度及流程
- 镇城建部门工作制度汇编
- 2025年中级消防设施操作员理论知识考试真题(后附专业答案和解析)
- 低空经济专题系列报告四:无人机与低空物流:拥抱无人物流时代
- 学前教育原理(第2版) 课件 第一章 学前教育导论
- 新生儿电解质紊乱与护理
- 生物分离工程教学课件
- (高清版)DG∕TJ 08-2312-2019 城市工程测量标准
- 青岛2025年自主招生考试物理试卷试题及答案详解
- TCPQSXF006-2023消防水带产品维护更换及售后服务
- GB/T 3405-2025石油苯
- DB22-T 389.1-2025 用水定额 第1部分:农业
- 浙江大学“六高强校”战略
评论
0/150
提交评论