基于Android的软件开发课件第02讲 Android设计模式与Activity生命周期

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
29
Activity 的生命周期
生命周期的调用和回调过程 • 不要调用Activity的生命周期的回调方法,只需在activity
子类里覆盖这些方法即可,Android会适时去调用它们。
30
Activity 的生命周期
生命周期的调用和回调过程 • Activity的子类可以在activity的生命周期状态发生关键性
创建一个新的QuizActivity实例; • 原因是,每次创建新QuizActivity实例时,mCurrentIndex
会被始化为0,因此又回到了第一道问题上
37
设备旋转与 Activity 生命周期
设备旋转前保存数据、旋转后重新获取数据 • 调用回调函数保存旋转前(变更)前的数据
protected void onSaveInstanceState(Bundle outState)
27
Activity 的生命周期
生命周期的调用和回调过程 • 在一个生命周期中,系统会像金字塔模型一样有序地调用周
期中每个阶段的回调方法。
28
Activity 的生命周期
周期中有三个状态是相对静态的 • Resumed:activity在最前端,用户可与它进行交互。通常
被理解为"running" 状态 • Paused: activity被另外一个activity所遮盖: • Stopped:activity完全被隐藏,不被用户可见。
概要?升级应用?android设计模式mvc模式?更新视图层更新控制层?添加图标资源?理解activity生命周期?设备旋转与数据保存升级应用5新的功能需求?提供更多的地理知识测试题目?可循环切换题目升级应用6复制第一章工程改名为ch2复制第一章工程改名为ch2复制第一章工程改名为ch2升级应用7创建新类?为geoquiz新增一个question类类的每个实例代表一道题
11
Android设计模式 MVC模式 *
使用MVC设计模式的好处 • 以类的方式组织代码有助于我们从整体设计和理解应用。
这样,我们就可以按类而不是“变量和方法”去思考设计 的问题。 • 同样,把类以模型层、视图层和控制层分开组织,我们就 可以按层而非一个个类来考虑了。这样,有助于我们设计 和理解更复杂的应用。
设置要显示的文字。 • 以根LinearLayout为父组件,新增一个Button组件。
15
更新控制层
Model Controller
View
16
更新控制层
升级 QuizActivity 支持多个题目
17
更新控制层
升级QuizActivity类,支持多个题目切换 • 新增一个Question类,类的每个实例代表一道题。 • 创建一个Question数组,管理多个题目。
18
更新控制层
升级QuizActivity类,支持多个题目切换 • mQuestionBank: 是Question对象数组 • mCurrentIndex :用于保存当前题目的ID号 • mQuestionTextView :指向布局里的TextView
19
更新控制层
把一系列题目轮换地显示在屏幕上 • 引用「下一个」按钮、为其设置监听器 • 递增数组索引、更新显示TextView的文
教育部 - Google产学合作
Android App 安卓程序设计
第2讲 Android设计模式与Activity 的生命周期
电子信息学院 徐强
目标 • 掌握Android设计模式--MVC模式; • 理解 Activity 生命周期; • 掌握设备旋转前、后数据处理的方法。
升级应用
新的功能需求 • 提供更多的地理知识测试题目 • 可循环切换题目
课后实验 1 • 参考课程指导,完成教材第二章和
第三章案例 课后实验 2 • 参考课程指导,完成教材第四章和
第五章案例
课后作业 • 教材第二章:挑战练习1、2、3
43
开始实践 *
44
5
升级应用
复制第一章工程,改名为ch2 复制第一章工程,改名为ch2 复制第一章工程,改名为ch2
6
升级应用
创建新类 • 为「GeoQuiz」新增一个Question类,类的每个实例代表
一道题。 • 创建一个Question数组,管理多个题目。
mTextResId 保存问题的资源ID mAnswerTrue 标定答案正确与否
res/layout-land/目录
将导航视图切换为Project模式, 查看新建的layout-land目录
41
Check Point:
1. 为什么onSaveInstanceState()能保存activity销毁 前一些数据?
2. 为什么updateQuestion()被调用两次?
42
实验和作业
本内容
20
更新控制层
封装公共代码: 更新视图 封装公共代码: 判断和显示问题答案
21
在设备上运行应用
• 在硬件设备上,如手机运行 GeoQuiz应用,会减轻电脑 负担,而且会更加直观。
• 建议直接Google如何连接的 手机?如“红米怎么打开 USB调试”或“华为荣耀3C 开发人员选项“
22
添加图标资源
25
Activity 的生命周期
26
Activity 的生命周期
每个Activity实例都有其生命周期 • 在其生命周期内,Activity在启动、运行、暂停和停止四种
状态间进行转换。每次状态发生转换时,都有一个Activity 方法将状态改变的消息通知给activity。
理解生命周期的调用和回调过程
32
跟踪Activity生命周期
输出日志信息 • 覆盖各个activity生命周期方法,调用Log类的方法,输出被
调用的消息
33
跟踪Activity生命周期
Android的Log类 • 在程序开发过程中,Log是广泛使用的用来记录程序执行过
程的机制,它既可以用于查看调试信息,也可以用于产品运 营中的事件记录; • android的Log提供的方法有:Log.v() Log.d() Log.i() Log.w()和Log.e()
转换时,通过覆盖回调方法完成某些工作。
31
Activity 的生命周期
生命周期的调用和回调过程 • Activity的子类可以在activity的生命周期状态发生关键性
转换时,通过覆盖回调方法完成某些工作。
通过覆盖onCreate()方法用户界面相关 的工作: • 实例化组件并将其放置在屏幕上; • 引用已实例化的组件; • 为组件设置监听器以处理用户交互; • 访问外部模型数据。
38
设备旋转与 Activity 生命周期
设备旋转前保存数据、旋转后重新获取数据 • 调用回调函数保存旋转前(变更)前的数据
protected void onSaveInstanceState(Bundle outState)
• onSaveInstanceState()在onPause()、onStop()以及 onDestroy()方法之前由系统调用。
• 通过覆盖 onSaveInstanceState() 方法,将一些数据保 存在 Bundle中,
• 然后在onCreate()方法中取回这些数据。
39
设备旋转前保存数据
40
设备旋转与 Activity 生命周期
创建水平模式布局 • 在res目录, 创建一个新文件夹
layout-land; • 将activity_quiz.xml文件复制至
12
Android设计模式 MVC 模式 *
数据控制流与用户交互
13
更新视图层
更新GeoQuiz应用的视图层,添加「下一个」按钮
14
更新视图层
应用视图层所需的变动操作如下: • 删除TextView的android:text属性,不再需要硬编码。 • 为TextView新增资源ID,以便在QuizActivity代码中为它
9
升级应用
应 用 对 象 协 同 工 作 图 解
10
Android设计模式 MVC 模式 *
Model
存储应用的数据,如GeoQuiz应 用里的地理知识问题。
Controller
包含了应用的逻辑单元,是视 图与模型的联系纽带。 响应由视图对象触发的各类事 件,管理模型与视图间的数据
View
能够看见的对象就是视图对象, 如按钮。应用的全部视图对象 组成了视图层。
Log Level ERROR WARNING INFO DEBUG VERBOSE
Method Log.e() Log.w() Log.i() Log.d() Log.v()
说明 错误 警告 信息型消息 调试输出:可能被过滤掉 只用于开发
34
跟踪Activity生命周期
使用Log.d()方法记录日志信息 • 参数1:日志信息的来源,参数2:日志的具体内容
mdpi、 mipmap-xhdpi和mipmap-xxhdpi四个目录。
目录的后缀名代表设备的像素密度 • mdpi:中等像素密度(约160dpi) • hdpi:高像素密度(约240dpi) • xhdpi:超高像素密度(约320dpi)
24
添加图标资源
在XML文件中引用资源 • 打开activity_quiz文件,为Button组件新增两个属性
7
升级应用
创建新类 • 为「GeoQuiz」新增一个Question类,类的每个实例代表
一道题。 • 创建一个Question数组,管理多个题目。题目本身放到哪里?
• 放到字符串资源里
8
升级应用
创建新类 • 生成getter与setter方法
实现数据的隐藏和封装: 利用set和get 方法提供类与外部的接口, 是一种编码标准和良好的编程习惯。
public static int d(String tag, String msg)
35
跟踪Activity生命周期
使用LogCat • 日志在项目的开发过程中会起到重要的作用; • Android项目中查看日志则须要使用 LogCat 工具
36
设备旋转与 Activity 生命周期
设备旋转后,GeoQuiz应用又重新显示回第一道 • 设备旋转时,当前的QuizActivity实例会被系统销毁,然后
在「下一个」按钮上显示向右的图标 • 下载“箭头图标”,分别复制到mipmap-hdpi、mipmap-
mdpi、 mipmap-xhdpi和mipmap-xxhdpi四个目录。
23
添加图标资源
在「下一个」按钮上显示向右的图标 • 下载“箭头图标”,分别复制到mipmap-hdpi、mipmap-
相关文档
最新文档