<4D6963726F736F667420576F7264202D20B5DA33D5C220B3CCD0F2C9E8BCC6BBF9B4A12E646F6378>

Similar documents
说 明 为 了 反 映 教 运 行 的 基 本 状 态, 为 校 和 院 制 定 相 关 政 策 和 进 行 教 建 设 与 改 革 提 供 据 依 据, 校 从 程 资 源 ( 开 类 别 开 量 规 模 ) 教 师 结 构 程 考 核 等 维 度, 对 2015 年 春 季 期 教 运 行 基

何 秋 琳 张 立 春 视 觉 学 习 研 究 进 展 视 觉 注 意 视 觉 感 知

《C语言基础入门》课程教学大纲

修改版-操作手册.doc

评 委 : 李 炎 斌 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单

I

评 委 : 徐 岩 宇 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单

<433A5C446F63756D656E E E67735C41646D696E F725CD7C0C3E65CC2DBCEC4CFB5CDB3CAB9D3C3D6B8C4CFA3A8BCF2BBAFA3A95CCAB9D3C3D6B8C4CF31302D31392E646F63>

龚 亚 夫 在 重 新 思 考 基 础 教 育 英 语 教 学 的 理 念 一 文 中 援 引 的 观 点 认 为 当 跳 出 本 族 语 主 义 的 思 维 定 式 后 需 要 重 新 思 考 许 多 相 连 带 的 问 题 比 如 许 多 发 音 的 细 微 区 别 并 不 影 响 理 解 和

HSK( 一 级 ) 考 查 考 生 的 日 常 汉 语 应 用 能 力, 它 对 应 于 国 际 汉 语 能 力 标 准 一 级 欧 洲 语 言 共 同 参 考 框 架 (CEF) A1 级 通 过 HSK( 一 级 ) 的 考 生 可 以 理 解 并 使 用 一 些 非 常 简 单 的 汉 语

,,,,, :,, (.,, );, (, : ), (.., ;. &., ;.. &.., ;, ;, ),,,,,,, ( ) ( ),,,,.,,,,,, : ;, ;,.,,,,, (., : - ),,,, ( ),,,, (, : ),, :,

目 录 关 于 图 标... 3 登 陆 主 界 面... 3 工 单 管 理... 5 工 单 列 表... 5 搜 索 工 单... 5 工 单 详 情... 6 创 建 工 单... 9 设 备 管 理 巡 检 计 划 查 询 详 情 销 售 管

2006年顺德区高中阶段学校招生录取分数线


深圳市新亚电子制程股份有限公司

第2章 数据类型、常量与变量

马 克 思 主 义 公 正 观 的 基 本 向 度 及 方 法 论 原 则!! # #

目 录 一 系 统 访 问... 1 二 门 户 首 页 申 报 用 户 审 核 用 户... 2 三 系 统 登 录 用 户 名 密 码 登 录 新 用 户 注 册 用 户 登 录 已 注 册 用

2 熟 悉 Visual Basic 的 集 成 开 发 环 境 3 了 解 可 视 化 面 向 对 象 编 程 事 件 驱 动 交 互 式 开 发 等 基 本 概 念 4 了 解 Visual Basic 的 特 点 环 境 要 求 与 安 装 方 法 1 Visual Basic 开 发 应 用

课程类 别

Microsoft Word - 第3章.doc

一 公 共 卫 生 硕 士 专 业 学 位 论 文 的 概 述 学 位 论 文 是 对 研 究 生 进 行 科 学 研 究 或 承 担 专 门 技 术 工 作 的 全 面 训 练, 是 培 养 研 究 生 创 新 能 力, 综 合 运 用 所 学 知 识 发 现 问 题, 分 析 问 题 和 解 决

0 年 上 半 年 评 价 与 考 核 细 则 序 号 部 门 要 素 值 考 核 内 容 考 核 方 式 考 核 标 准 考 核 ( 扣 原 因 ) 考 评 得 3 安 全 生 产 目 30 无 同 等 责 任 以 上 道 路 交 通 亡 人 事 故 无 轻 伤 责 任 事 故 无 重 大 质 量

Microsoft Word - 第7章 图表反转形态.doc

( ) 信 号 与 系 统 Ⅰ 学 科 基 础 必 修 课 教 周 2016 年 06 月 13 日 (08:00-09:35) ( )

( 二 ) 现 行 统 一 高 考 制 度 不 利 于 培 养 人 的 创 新 精 神,,,,,,,,,,,,, [ ],,,,,,,,,,, :, ;,,,,,,? ( 三 ) 现 行 统 一 高 考 制 度 不 利 于 全 体 学 生 都 获 得 全 面 发 展,, [ ],,,,,,,,,,,

登录、注册功能的测试用例设计.doc


国债回购交易业务指引

电信系教学大纲的基本规范

世华财讯模拟操作手册

教师上报成绩流程图

随着执业中医师资格考试制度的不断完善,本着为我校中医学专业认证服务的目的,本文通过对我校中医类毕业生参加2012年和2013年的中医执业医师考试成绩及通过率、掌握率进行分析,并与全国的平均水平进行差异比较分析,以此了解我校执业中医师考试的现状,进而反映我校中医类课程总体教学水平,发现考核知识模块教学中存在的不足,反馈给相关学院和教学管理部门,以此提高教学和管理水平。

名 称 生 命 科 学 学 院 环 境 科 学 1 生 物 学 仅 接 收 院 内 调 剂, 初 试 分 数 满 足 我 院 生 物 学 复 试 最 低 分 数 线 生 命 科 学 学 院 生 态 学 5 生 态 学 或 生 物 学 生 命 科 学 学 院

微软用户

抗 战 时 期 国 民 政 府 的 银 行 监 理 体 制 探 析 % # % % % ) % % # # + #, ) +, % % % % % % % %

4 进 入 交 互 区 设 置 的 组 件 管 理, 在 组 件 管 理 中, 教 师 可 以 选 择 课 程 空 间 中 的 所 有 组 件, 并 通 过 点 击 启 用 或 不 启 用 选 定 组 件 在 课 程 空 间 中 的 显 示 5 进 入 工 作 室 管 理 的 工 作 室 首 页,

珠江钢琴股东大会

全国建筑市场注册执业人员不良行为记录认定标准(试行).doc

18 上 报 该 学 期 新 生 数 据 至 阳 光 平 台 第 一 学 期 第 四 周 至 第 六 周 19 督 促 学 习 中 心 提 交 新 增 专 业 申 请 第 一 学 期 第 四 周 至 第 八 周 20 编 制 全 国 网 络 统 考 十 二 月 批 次 考 前 模 拟 题 第 一 学

<4D F736F F D20B9D8D3DAB0BABBAAA3A8C9CFBAA3A3A9D7D4B6AFBBAFB9A4B3CCB9C9B7DDD3D0CFDEB9ABCBBE C4EAC4EAB6C8B9C9B6ABB4F3BBE1B7A8C2C9D2E2BCFBCAE92E646F6378>


新, 各 地 各 部 门 ( 单 位 ) 各 文 化 事 业 单 位 要 高 度 重 视, 切 实 加 强 领 导, 精 心 组 织 实 施 要 根 据 事 业 单 位 岗 位 设 置 管 理 的 规 定 和 要 求, 在 深 入 调 查 研 究 广 泛 听 取 意 见 的 基 础 上, 研 究 提

一 开 放 性 的 政 策 与 法 规 二 两 岸 共 同 的 文 化 传 承 三 两 岸 高 校 各 自 具 有 专 业 优 势 远 见 杂 志 年 月 日

¹ º ¹ º 农 业 流 动 人 口 是 指 户 口 性 质 为 农 业 户 口 在 流 入 地 城 市 工 作 生 活 居 住 一 个 月 及 以 上 的 流 动 人 口 非 农 流 动 人 口 是 指 户 口 性 质 为 非 农 户 口 在 流 入 地 城 市 工 作 生 活 居 住 一 个

中 中 中 中 部 中 岗 位 条 件 历 其 它 历 史 师 地 理 师 生 物 师 体 与 健 康 师 从 事 中 历 史 工 从 事 中 地 理 工 从 事 中 生 物 工 从 事 中 体 与 健 康 工 2. 课 程 与 论 ( 历 史 ); 2. 科 ( 历 史 )

证券代码: 证券简称:长城电脑 公告编号:

 编号:

<4D F736F F D C3E6CFF2B6D4CFF3A3A8B5DAC8FDD5C220C0E0CCD8D0D4A3A92E646F63>

untitled

3 月 30 日 在 中 国 证 券 报 上 海 证 券 报 证 券 时 报 证 券 日 报 和 上 海 证 券 交 易 所 网 站 上 发 出 召 开 本 次 股 东 大 会 公 告, 该 公 告 中 载 明 了 召 开 股 东 大 会 的 日 期 网 络 投 票 的 方 式 时 间 以 及 审

采 取 行 动 的 机 会 90% 开 拓 成 功 的 道 路 2

Microsoft Word - 文件汇编.doc

自 服 务 按 钮 无 法 访 问 新 系 统 的 自 服 务 页 面 因 此 建 议 用 户 从 信 网 中 心 ( 主 页, 右 下 角 位 置 的 常 用 下 载, 或 校 园 网 用 户 自 服 务 ( 首 页

伊 犁 师 范 学 院 611 语 言 学 概 论 全 套 考 研 资 料 <2016 年 最 新 考 研 资 料 > 2-2 语 言 学 纲 要 笔 记, 由 考 取 本 校 本 专 业 高 分 研 究 生 总 结 而 来, 重 点 突 出, 借 助 此 笔 记 可 以 大 大 提 高 复 习 效

导 数 和 微 分 的 概 念 导 数 的 几 何 意 义 和 物 理 意 义 函 数 的 可 导 性 与 连 续 性 之 间 的 关 系 平 面 曲 线 的 切 线 和 法 线 导 数 和 微 分 的 四 则 运 算 基 本 初 等 函 数 的 导 数 复 合 函 数 反 函 数 隐 函 数 以

Template BR_Rec_2005.dot

上海证券交易所会议纪要

正 规 培 训 达 规 定 标 准 学 时 数, 并 取 得 结 业 证 书 二 级 可 编 程 师 ( 具 备 以 下 条 件 之 一 者 ) (1) 连 续 从 事 本 职 业 工 作 13 年 以 上 (2) 取 得 本 职 业 三 级 职 业 资 格 证 书 后, 连 续 从 事 本 职 业

云信Linux SSH认证代理用户手册

一 从 分 封 制 到 郡 县 制 一 从 打 虎 亭 汉 墓 说 起

中 国 软 科 学 年 第 期!!!

金 不 少 于 800 万 元, 净 资 产 不 少 于 960 万 元 ; (3) 近 五 年 独 立 承 担 过 单 项 合 同 额 不 少 于 1000 万 元 的 智 能 化 工 程 ( 设 计 或 施 工 或 设 计 施 工 一 体 ) 不 少 于 2 项 ; (4) 近 三 年 每 年

生产支援功能 使用说明书(IP-110 篇)

学 年 第 二 学 期 集 中 考 试 安 排 (18 周 ) 考 试 日 期 :6 月 27 日 星 期 一 8:10-9:50 第 二 公 共 教 学 楼 A 区 A 高 等 数 学 ( 理 二 2) 复 材 材 料 科 学 与 工 程

类 似 地, 又 可 定 义 变 下 限 的 定 积 分 : ( ). 与 ψ 统 称 为 变 限 积 分. f ( ) d f ( t) dt,, 注 在 变 限 积 分 (1) 与 () 中, 不 可 再 把 积 分 变 量 写 成 的 形 式 ( 例 如 ) 以 免 与 积 分 上 下 限 的

ETF、分级基金规模、份额变化统计


2. 本 次 修 改 后, 投 资 者 申 购 新 股 的 持 有 市 值 要 求 市 值 计 算 规 则 及 证 券 账 户 使 用 的 相 关 规 定 是 否 发 生 了 变 化? 答 : 未 发 生 变 化 投 资 者 申 购 新 股 的 持 有 市 值 是 指, 以 投 资 者 为 单 位

<4D F736F F D20BFC9B1E0B3CCD0F2BFD8D6C6CFB5CDB3C9E8BCC6CAA6B9FABCD2D6B0D2B5B1EAD7BC2E646F63>

2014年中央财经大学研究生招生录取工作简报

<4D F736F F D C4EAB9A4B3CCCBB6CABFCAFDD1A7D7A8D2B5BFCEBFBCCAD4B4F3B8D9D3EBD2AAC7F3>

国家职业标准:网络课件设计师

<433A5C C6B73625C B746F705CB9FABCCAD6D0D2BDD2A9D7A8D2B5B8DFBCB6BCBCCAF5D6B0B3C6C6C0C9F3C9EAC7EBD6B8C4CFA3A CDA8D3C3B0E6A3A92E646F63>

<443A5C6D B5C30312EB9A4D7F7CEC4B5B55C30322EBACFCDACCEC4B5B55C C30342EC8CBC9E7CCFC5C31332ECFEEC4BFC5E0D1B55C E30385C322EB2D9D7F7CAD6B2E12E646F63>

乐视云视频发行平台 操作手册 V1.1

年 第 期 % %! & % % % % % % &

现 场 会 议 时 间 为 :2016 年 5 月 19 日 网 络 投 票 时 间 为 :2016 年 5 月 18 日 年 5 月 19 日 其 中 通 过 深 圳 证 券 交 易 所 交 易 系 统 进 行 网 络 投 票 的 时 间 为 2016 年 5 月 19 日 9:30-

第 一 部 分 MagiCAD for Revit 安 装 流 程


一、资质申请

引言

上证指数

<4D F736F F D D323630D6D0B9FAD3A6B6D4C6F8BAF2B1E4BBAFB5C4D5FEB2DFD3EBD0D0B6AF C4EAB6C8B1A8B8E6>

四川省农村义务教育学生

第 期 李 伟 等 用 方 法 对 中 国 历 史 气 温 数 据 插 值 可 行 性 讨 论

工 程 造 价 咨 询 企 业 管 理 系 统 操 作 手 册 目 录 1 造 价 企 业 登 录 企 业 基 本 信 息 查 看 企 业 人 员 信 息 查 看 企 业 基 本 信 息 操 作 企 业 简 介 企 业 章

中 日 信 息 化 的 比 较 与 合 作 一 中 日 信 息 化 的 规 模 比 较

工 程 勘 察 资 质 标 准 根 据 建 设 工 程 勘 察 设 计 管 理 条 例 和 建 设 工 程 勘 察 设 计 资 质 管 理 规 定, 制 定 本 标 准 一 总 则 ( 一 ) 本 标 准 包 括 工 程 勘 察 相 应 专 业 类 型 主 要 专 业 技 术 人 员 配 备 技 术

黄 金 原 油 总 持 仓 增 长, 同 比 增 幅 分 别 为 4.2% 和 4.1% 而 铜 白 银 以 及 玉 米 则 出 现 减 持, 减 持 同 比 减 少 分 别 为 9.4%,9.4% 以 及 6.5% 大 豆, 豆 粕 结 束 连 续 4 周 总 持 仓 量 增 长, 出 现 小 幅

øÕªß∂À≤Ÿ◊˜ ÷≤·

附 件 : 上 海 市 建 筑 施 工 企 业 施 工 现 场 项 目 管 理 机 构 关 键 岗 位 人 员 配 备 指 南 二 一 四 年 九 月 十 一 日 2

Cybozu Garoon 3 管理员手册

抗 日 战 争 研 究 年 第 期

Microsoft Word - 资料分析练习题09.doc

目 录 一 激 活 账 号... 2 二 忘 记 密 码 后 如 何 找 回 密 码?... 3 三 如 何 管 理 学 校 信 息 及 球 队 学 生 教 师 等 信 息... 6 四 如 何 发 布 本 校 校 园 文 化? 五 如 何 向 教 师 发 送 通 知? 六

公 开 刊 物 须 有 国 内 统 一 刊 (CN), 发 表 文 章 的 刊 物 需 要 在 国 家 新 闻 出 版 广 电 总 局 ( 办 事 服 务 便 民 查 询 新 闻 出 版 机 构 查 询 ) 上 能 够 查 到 刊 凡 在 有 中 国 标 准 书 公 开

全国教师资格认定管理信息系统

合 并 计 算 配 售 对 象 持 有 多 个 证 券 账 户 的, 多 个 证 券 账 户 市 值 合 并 计 算 确 认 多 个 证 券 账 户 为 同 一 配 售 对 象 持 有 的 原 则 为 证 券 账 户 注 册 资 料 中 的 账 户 持 有 人 名 称 有 效 身 份 证 明 文 件

( 此 页 无 正 文, 为 广 东 东 方 精 工 科 技 股 份 有 限 公 司 关 于 提 供 资 料 真 实 准 确 和 完 整 的 承 诺 函 之 签 署 页 ) 广 东 东 方 精 工 科 技 股 份 有 限 公 司 法 定 代 表 人 : 唐 灼 林 2016 年 7 月 28 日

Transcription:

Android 应 用 程 序 开 发 与 典 型 案 例 作 者 : 华 清 远 见 第 3 章 程 序 设 计 基 础 本 章 简 介 在 上 一 章 的 学 习 中, 主 要 了 解 了 Eclipse+ADT 的 开 发 流 程, 对 其 有 了 初 步 的 认 识 和 了 解 对 初 学 者 来 说, 这 一 章 的 内 容 比 较 烦 琐, 但 是 又 必 须 掌 握, 这 也 是 进 行 Android 开 发 必 须 经 过 的 第 一 步, 有 了 这 个 基 础, 我 们 将 进 行 Android 应 用 程 序 设 计

3.1 Android 程 序 框 架 上 一 章 我 们 建 立 了 AndroidTest 项 目, 在 项 目 中, 所 有 的 代 码 是 由 ADT 插 件 自 动 生 成 的, 我 们 并 没 有 对 其 进 行 编 码, 所 以 没 有 对 其 框 架 进 行 分 析 其 实 每 一 个 平 台 都 有 自 己 的 结 构 框 架, 比 如, 在 最 初 学 习 Java 或 者 C/C++ 时, 第 一 个 程 序 总 是 main 方 法, 以 及 文 件 类 型 和 存 储 方 式 等 本 节 将 对 Android 平 台 的 目 录 结 构 文 件 类 型 及 其 负 责 的 功 能 和 Android 平 台 的 main 方 法 进 行 剖 析 3.1.1 Android 项 目 目 录 结 构 有 了 前 两 章 的 基 础, 再 来 打 开 上 一 章 建 立 的 AndroidTest 项 目, 分 析 其 项 目 目 录 结 构, 对 Android 项 目 进 一 步 深 入 了 解 首 先 启 动 Eclipse, 展 开 Package Explorer 导 航 器 中 的 AndroidTest 项 目, 如 图 3-1 所 示 图 3-1 JDK 安 装 检 查 Android 项 目 结 构 与 一 般 的 Java 项 目 一 样,src 文 件 夹 是 项 目 的 所 有 包 及 源 文 件 (.java),res 文 件 夹 中 则 包 含 了 项 目 中 的 所 有 资 源, 比 如, 程 序 图 标 (drawable) 布 局 文 件 (layout) 常 量 (values) 等 下 面 来 介 绍 其 他 Java 项 目 中 没 有 的 gen 文 件 夹 中 的 R.java 文 件 和 每 个 Android 项 目 都 必 须 有 的 AndroidManfest.xml 文 件 R.java 是 在 建 立 项 目 时 自 动 生 成 的, 这 个 文 件 是 只 读 模 式, 不 能 更 改,R.java 文 件 是 定 义 该 项 目 所 有 资 源 的 索 引 文 件 先 来 看 看 AndroidTest 项 目 的 R.java 文 件, 如 代 码 清 单 3-1 所 示 代 码 清 单 3-1 R.java package com.examples.android.helloactivity; public final class R public static final class attr public static final class drawable public static final int icon=0x7f020000; public static final class layout public static final int main=0x7f030000; public static final class string public static final int app_name=0x7f040001; public static final int hello=0x7f040000; 2

可 以 看 到 这 里 定 义 了 很 多 常 量, 仔 细 一 看 就 发 现 这 些 常 量 的 名 字 都 与 res 文 件 夹 中 的 文 件 名 相 同, 再 次 证 明 R.java 文 件 中 所 存 储 的 是 该 项 目 所 有 资 源 的 索 引 有 了 这 个 文 件, 在 程 序 中 使 用 资 源 将 变 得 更 加 方 便, 可 以 很 快 地 找 到 要 使 用 的 资 源, 由 于 这 个 文 件 不 能 被 手 动 编 辑, 所 以 当 在 项 目 中 加 入 了 新 的 资 源 时, 只 需 要 刷 新 一 下 该 项 目,R.java 文 件 便 自 动 生 成 了 所 有 资 源 的 索 引 AndroidManfest.xml 文 件 则 包 含 了 该 项 目 中 所 使 用 的 Activity Service Receiver, 先 来 打 开 AndroidTest 项 目 中 的 AndroidManfest.xml 文 件, 如 代 码 清 单 3-2 所 示 <?xml version="1.0" encoding="utf-8"?> 代 码 清 单 3-2 AndroidManfest.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" package=" com.examples.android.helloactivity" android:versioncode="1" android:versionname="1.0" > <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".helloactivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> </manifest> 代 码 清 单 3-2 中,intent-filters 描 述 了 Activity 启 动 的 位 置 和 时 间 每 当 一 个 Activity( 或 操 作 系 统 ) 要 执 行 一 个 操 作 时, 它 将 创 建 出 一 个 Intent 的 对 象, 这 个 Intent 对 象 能 承 载 的 信 息 可 描 述 你 想 做 什 么, 你 想 处 理 什 么 数 据, 数 据 的 类 型, 以 及 一 些 其 他 信 息 而 Android 则 会 和 每 个 Application 所 暴 露 的 intent-filter 的 数 据 进 行 比 较, 找 到 最 合 适 Activity 来 处 理 调 用 者 所 指 定 的 数 据 和 操 作 下 面 我 们 来 仔 细 分 析 AndroidManfest.xml 文 件, 如 表 3-1 所 示 表 3-1 AndroidManfest.xml 分 析 manifest xmlns:android package application android:icon android:label activity android:name intent-filter action 根 节 点, 描 述 了 package 中 所 有 的 内 容 包 含 命 名 空 间 的 声 明 xmlns:android=http://schemas.android.com/apk/res/android, 使 得 Android 中 各 种 标 准 属 性 能 在 文 件 中 使 用, 提 供 了 大 部 分 元 素 中 的 数 据 声 明 应 用 程 序 包 包 含 Package 中 Application 级 别 组 件 声 明 的 根 节 点 此 元 素 也 可 包 含 Application 的 一 些 全 局 和 默 认 的 属 性, 如 标 签 icon 主 题 必 要 的 权 限, 等 等 一 个 manifest 能 包 含 零 个 或 一 个 此 元 素 ( 不 能 大 于 一 个 ) 应 用 程 序 图 标 应 用 程 序 名 字 用 来 与 用 户 交 互 的 主 要 工 具 Activity 是 用 户 打 开 一 个 应 用 程 序 的 初 始 页 面, 大 部 分 被 使 用 到 的 其 他 页 面 也 由 不 同 的 Activity 所 实 现, 并 声 明 在 另 外 的 Activity 标 记 中 注 意, 每 一 个 Activity 必 须 有 一 个 <Activity> 标 记 对 应, 无 论 它 给 外 部 使 用 或 是 只 用 于 自 己 的 Package 中 如 果 一 个 Activity 没 有 对 应 的 标 记, 你 将 不 能 运 行 它 另 外, 为 了 支 持 运 行 时 查 找 Activity, 可 包 含 一 个 或 多 个 <intent-filter> 元 素 来 描 述 Activity 所 支 持 的 操 作 应 用 程 序 默 认 启 动 的 Activity 声 明 了 指 定 的 一 组 组 件 支 持 的 Intent 值, 从 而 形 成 了 IntentFilter 除 了 能 在 此 元 素 下 指 定 不 同 类 型 的 值, 属 性 也 能 放 在 这 里 来 描 述 一 个 操 作 所 需 的 唯 一 的 标 签 icon 和 其 他 信 息 组 件 支 持 的 Intent action 3

category uses-sdk 组 件 支 持 的 Intent Category 这 里 指 定 了 应 用 程 序 默 认 启 动 的 Activity 该 应 用 程 序 所 使 用 的 SDK 版 本 相 关 下 面 我 们 看 看 资 源 文 件 中 一 些 常 量 的 定 义, 如 String.xml, 如 代 码 清 单 3-3 所 示 代 码 清 单 3-3 String.xml <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">hello World, HelloActivity!</string> <string name="app_name">helloworld</string> </resources> 这 个 文 件 很 简 单, 就 定 义 了 两 个 字 符 串 资 源, 与 R.java 中 对 应 的 索 引 如 代 码 清 单 3-4 所 示 public static final class string public static final int app_name=0x7f040001; public static final int hello=0x7f040000; 代 码 清 单 3-4 R.java 中 的 String 类 在 程 序 中 装 载 并 使 用 这 个 字 符 串 资 源 如 代 码 清 单 3-5 所 示 代 码 清 单 3-5 String 资 源 的 使 用 Resources r = this.getcontext().getresources(); String appname = ((String) r.getstring(r.string.appname)); String hello = ((String) r.getstring(r.string.hello)); 基 本 上 可 以 定 义 出 项 目 中 所 有 使 用 的 常 量, 例 如 颜 色 所 以, 可 根 据 需 要 对 资 源 常 量 进 行 定 义 下 面 是 定 义 了 颜 色 的 常 量 colors.xml, 如 代 码 清 单 3-6 所 示 <?xml version="1.0" encoding="utf-8"?> <resources> <color name="status_idle">#cccccc</color> <color name="status_done">#637a47</color> <color name="status_sync">#cc9900</color> <color name="status_error">#ac4444</color> </resources> 代 码 清 单 3-6 colors.xml 现 在 我 们 来 分 析 AndroidTest 项 目 的 布 局 文 件 (layout), 首 先 打 开 res layout main.xml 文 件, 如 代 码 清 单 3-7 所 示 代 码 清 单 3-7 main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout> 在 代 码 清 单 3-7 中, 有 以 下 几 个 布 局 和 参 数 < LinearLayout>: 线 性 版 面 配 置, 在 这 个 标 签 中, 所 有 元 件 都 是 由 上 到 下 排 成 的 android:orientation: 表 示 这 个 介 质 的 版 面 配 置 方 式 是 从 上 到 下 垂 直 地 排 列 其 内 部 的 视 图 这 里 vertical 表 示 是 水 平 排 列 4

专 业 始 于 专 注 卓 识 源 于 远 见 android:layout_width: 定 义 当 前 视 图 在 屏 幕 上 所 占 的 宽 度,fill_parent/ match_parent 即 填 充 整 个 屏 幕 android:layout_height: 定 义 当 前 视 图 在 屏 幕 上 所 占 的 高 度,fill_parent/ match_parent 即 填 充 整 个 屏 幕 wrap_content: 随 着 文 字 大 小 的 不 同 而 改 变 这 个 视 图 的 宽 度 或 高 度 layout_weight : 用 于 给 一 个 线 性 布 局 中 的 多 个 视 图 的 重 要 度 赋 值 所 有 视 图 都 有 layout_weight 值, 默 认 为 零, 即 需 要 显 示 多 大 的 视 图 就 占 据 多 大 的 屏 幕 空 间 如 果 值 大 于 零, 则 将 父 视 图 中 的 可 用 空 间 分 割, 分 割 大 小 具 体 取 决 于 每 一 个 视 图 的 layout_weight 值 和 该 值 在 当 前 屏 幕 布 局 的 整 体 layout_weight 值, 以 及 在 其 他 视 图 屏 幕 布 局 的 layout_weight 值 中 所 占 的 比 例 在 这 里, 布 局 中 设 置 了 一 个 TextView, 用 来 配 置 文 本 标 签 Widget, 其 中 设 置 的 属 性 android:layout_width 为 整 个 屏 幕 的 宽 度,android:layout_height 可 以 根 据 文 字 来 改 变 高 度, 而 android:text 则 设 置 了 这 个 TextView 要 显 示 的 文 字 内 容, 这 里 引 用 了 @string 中 的 hello 字 符 串, 即 String.xml 文 件 中 的 hello 所 代 表 的 字 符 串 资 源 hello 字 符 串 的 内 容 "Hello World, HelloActivity!" 这 就 是 在 AndroidTest 项 目 运 行 时 看 到 的 字 符 串 最 后, 分 析 AndroidTest 项 目 的 主 程 序 文 件 HelloActivity.java, 如 代 码 清 单 3-8 所 示 代 码 清 单 3-8 HelloActivity.java package com.examples.android.helloactivity; import android.app.activity; import android.os.bundle; public class HelloActivity extends Activity public void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate); setcontentview(r.layout.main); 主 程 序 HelloActivity 类 继 承 自 Activity 类, 重 写 了 void oncreate(bundle savedinstance State) 方 法 在 oncreate 方 法 中 通 过 setcontentview(r.layout.main) 设 置 了 Activity 要 显 示 的 布 局 文 件 (/layout/main.xml) 到 这 里, 是 不 是 明 白 了 为 什 么 在 创 建 项 目 时 没 有 进 行 编 码 就 可 以 直 接 运 行 程 序 呢? 当 然, 这 也 是 Android 开 发 的 特 点, 这 样 可 以 很 轻 松 地 将 代 码 和 UI 分 开, 在 国 际 化 和 程 序 维 护 方 面 有 着 巨 大 的 作 用 如 果 Android 程 序 需 要 自 适 应 国 际 化, 比 如 说 多 国 语 言 等 问 题, 那 么 就 可 以 定 义 不 同 语 言 的 UI 布 局, 在 程 序 装 载 时 调 用 不 同 的 布 局 而 且, 如 果 需 要 修 改 UI 的 一 些 问 题, 就 不 必 查 看 代 码 了, 直 接 更 改 这 些 布 局 文 件 即 可, 是 不 是 很 方 便? 当 然, 这 需 要 开 发 者 在 开 发 时 使 用 这 种 MVC 框 架, 尽 量 减 少 使 用 硬 编 码 3.1.2 Android 应 用 解 析 上 面 了 解 了 Android 应 用 程 序 的 目 录 结 构 和 其 中 每 个 文 件 的 功 能, 要 对 其 进 行 应 用 开 发, 还 需 要 对 Android 应 用 构 造 进 行 深 入 的 分 析 下 面 介 绍 一 下 Android 应 用 开 发 中 所 应 用 到 的 重 要 模 块 Activity Intent Content Provider Service 当 然, 并 非 所 有 的 Android 应 用 程 序 都 必 须 由 这 4 部 分 组 成, 它 可 以 根 据 开 发 者 需 求 来 进 行 组 合, 比 如, 上 面 建 立 的 HelloActivity 项 目 就 只 使 用 了 Activity 这 一 个 模 块 但 是, 对 于 任 何 一 个 应 用 程 序 来 说, 都 必 须 在 AndroidManfest.xml 文 件 中 声 明 使 用 到 的 模 块 1.Activity 5

Android 中 最 基 本 的 模 块 就 是 Activity, 在 之 前 的 HelloActivity 项 目 中 已 经 使 用 过 我 们 称 之 为 活 动, 在 应 用 程 序 中, 一 个 活 动 (Activity) 通 常 就 是 一 个 单 独 的 屏 幕 每 一 个 活 动 都 被 实 现 为 一 个 独 立 的 类, 并 且 继 承 于 从 活 动 基 类, 活 动 类 将 会 显 示 由 视 图 控 件 组 成 的 用 户 接 口, 并 对 事 件 作 出 响 应 例 如,HelloActivity 项 目 中 的 HelloActivity.java 即 继 承 了 活 动 (Activity) 类 大 多 数 的 应 用 都 是 由 多 个 Activity 显 示 组 成, 例 如, 对 一 个 文 本 信 息 应 用 而 言, 第 一 个 屏 幕 用 来 显 示 发 送 消 息 的 联 系 人 列 表, 第 二 个 屏 幕 用 来 写 文 本 消 息 和 选 择 收 件 人, 第 三 个 屏 幕 查 看 消 息 历 史 或 者 消 息 设 置 操 作 等 这 里 的 每 一 个 屏 幕 就 是 一 个 活 动, 很 容 易 实 现 从 一 个 屏 幕 到 一 个 新 的 屏 幕, 并 且 完 成 新 的 活 动 当 一 个 新 的 屏 幕 打 开 后, 前 一 个 屏 幕 将 会 暂 停, 并 保 存 在 历 史 栈 中 用 户 可 以 返 回 到 历 史 栈 中 的 前 一 个 屏 幕, 当 屏 幕 不 再 使 用 时, 还 可 以 从 历 史 栈 中 删 除 简 单 理 解,Activity 就 代 表 着 用 户 所 能 看 到 的 屏 幕, 它 主 要 处 理 了 应 用 程 序 的 整 体 性 工 作, 例 如, 为 用 户 显 示 指 定 的 View, 启 动 其 他 Activity, 监 听 系 统 事 件 ( 按 键 事 件 触 摸 屏 事 件 等 ) 等 所 有 应 用 的 Activity 都 继 承 于 Android 提 供 的 基 类 android.app.activity 类, 其 他 的 Activity 继 承 该 父 类 后, 通 过 父 类 的 方 法 来 实 现 各 种 功 能, 这 种 设 计 在 其 他 领 域 也 较 为 常 见 2.Intent 在 Android 中, 利 用 Intent 类 实 现 了 在 Activity1 与 Activity2 之 间 的 切 换 ( 以 及 启 动 Service 等 ) Intent 类 主 要 用 于 描 述 应 用 的 功 能 在 Intent 的 描 述 结 构 中, 有 动 作 (Action) 和 动 作 对 应 的 数 据 (data) 两 个 最 重 要 的 部 分 其 中, 典 型 的 动 作 类 型 有 :MAIN VIEW PICK EDIT 等, 而 动 作 对 应 的 数 据 以 URI 的 形 式 表 示 例 如, 如 果 要 查 看 一 个 人 的 联 系 方 式, 需 要 先 创 建 一 个 动 作 类 型 为 VIEW 的 Intent, 以 及 一 个 表 示 这 个 动 作 对 应 的 数 据 ( 这 里 就 是 这 个 人 ) 的 URI 从 一 个 屏 幕 导 航 到 另 一 个 屏 幕, 我 们 需 要 解 析 各 种 Intent 为 了 实 现 向 前 导 航, 首 先, 我 们 调 用 Activity 的 startactivity(intent myintent) 方 法 此 时, 系 统 为 找 到 最 匹 配 myintent 的 Intent 对 应 的 Activity, 就 将 在 所 有 已 安 装 的 应 用 程 序 中 定 义 的 IntentFilter 中 查 找 而 匹 配 的 对 应 的 新 的 Activity 在 接 收 到 myintent 的 通 知 后, 开 始 运 行 当 startactivity 方 法 被 调 用 时, 将 触 发 解 析 myintent 的 动 作, 该 机 制 提 供 了 两 个 关 键 好 处 (1)Activities 能 够 重 复 利 用 从 其 他 组 件 中 以 Intent 的 形 式 产 生 的 请 求 (2)Activities 可 以 在 任 何 时 候 被 具 有 相 同 Action 的 新 的 Activity 取 代 下 面 举 例 说 明 两 个 Activity 之 间 的 切 换 运 行 效 果 : 当 应 用 程 序 启 动 时, 显 示 布 局 main.xml, 如 图 3-2 所 示, 当 我 们 单 击 切 换 按 钮 时, 屏 幕 显 示 布 局 main2.xml, 如 图 3-3 所 示, 再 单 击 切 换 按 钮, 又 回 到 如 图 3-2 所 示 的 状 态 就 这 样 通 过 Intent 完 成 了 两 个 Activity 之 间 的 切 换 图 3-2 Activity1 图 3-3 Activity2 以 下 是 两 个 Activity 的 代 码 package com.example.android.examples_03_01; 代 码 清 单 3-9 Activity1.java import android.app.activity; import android.content.intent; import android.os.bundle; import android.view.view; import android.widget.button; 6

/ ** * 在 Examples_02_01 项 目 中 一 共 使 用 了 两 个 Activity, * 每 使 用 一 个 Activity, 都 必 须 在 AndroidManifest.xml 中 * 进 行 声 明 */ public class Activity1 extends Activity public void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate); /* 设 置 显 示 main.xml 布 局 */ setcontentview(r.layout.main); /* findviewbyid(r.id.button1) 取 得 布 局 main.xml 中 的 button1 */ Button button = (Button) findviewbyid(r.id.button1); /* 监 听 button 的 事 件 信 息 */ button.setonclicklistener(new Button.OnClickListener() ); public void onclick(view v) /* 新 建 一 个 Intent 对 象 */ Intent intent = new Intent(); /* 指 定 intent 要 启 动 的 类 */ intent.setclass(activity1.this, Activity2.class); /* 启 动 一 个 新 的 Activity */ startactivity(intent); /* 关 闭 当 前 的 Activity */ Activity1.this.finish(); package com.example.android.examples_03_01; 代 码 清 单 3-10 Activity02.java import android.app.activity; import android.content.intent; import android.os.bundle; import android.view.view; import android.widget.button; public class Activity2 extends Activity public void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate); /* 设 置 显 示 main2.xml 布 局 */ setcontentview(r.layout.main2); /* findviewbyid(r.id.button2) 取 得 布 局 main.xml 中 的 button2 */ Button button = (Button) findviewbyid(r.id.button2); /* 监 听 button 的 事 件 信 息 */ button.setonclicklistener(new Button.OnClickListener() ); public void onclick(view v) /* 新 建 一 个 Intent 对 象 */ Intent intent = new Intent(); /* 指 定 intent 要 启 动 的 类 */ intent.setclass(activity2.this, Activity1.class); /* 启 动 一 个 新 的 Activity */ startactivity(intent); /* 关 闭 当 前 的 Activity */ Activity2.this.finish(); 7

代 码 清 单 3-11 main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/button1" android:layout_width="100px" android:layout_height="wrap_content" android:layout_x="100px" android:layout_y="80px" android:text=" 跳 转 到 Activity2" > </Button> </LinearLayout> 代 码 清 单 3-12 Main2.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > </TextView> <Button android:id="@+id/button2" android:layout_width="100px" android:layout_height="wrap_content" android:layout_x="100px" android:layout_y="80px" android:text=" 返 回 Activity1" > </Button> </LinearLayout> 如 代 码 清 单 3-9 所 示, 需 要 在 AndroidManifest.xml 中 声 明 使 用 的 Activity2, 如 代 码 清 单 3-13 所 示 代 码 清 单 3-13 AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.examples_03_01" android:versioncode="1" android:versionname="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".activity1" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <activity android:name="activity2"></activity> </application> <uses-sdk android:minsdkversion="8" /> </manifest> 问 :Android 应 用 如 何 对 外 部 事 件 ( 如 当 电 话 呼 入 时, 或 者 数 据 网 络 可 用 时, 或 者 到 了 晚 上 时 ) 做 出 响 应? 8

答 : 使 用 IntentReceiver 在 相 应 的 事 件 发 生 时,IntentReceiver 使 用 NotificationManager 通 知 用 户, 但 它 并 不 能 生 成 UI 它 在 AndroidManifest.xml 中 注 册, 也 可 以 在 代 码 中 使 用 Context.registerReceiver() 进 行 注 册 当 IntentReceiver 被 触 发 时, 应 用 不 必 对 请 求 调 用 IntentReceiver, 系 统 会 在 需 要 时 启 动 应 用 各 种 应 用 还 可 以 通 过 使 用 Context.broadcastIntent() 将 它 们 自 己 的 intentreceiver 广 播 给 其 他 应 用 3.Content Provider Android 应 用 能 够 将 它 们 的 数 据 保 存 到 文 件 和 SQLite 数 据 库 中, 甚 至 是 任 何 有 效 的 设 备 中 利 用 Content Provider 实 现 应 用 数 据 与 其 他 的 应 用 共 享 因 为 Content Provider 类 实 现 了 一 组 标 准 的 方 法, 能 够 让 其 他 的 应 用 保 存 或 读 取 此 内 容 提 供 器 处 理 的 各 种 数 据 类 型 Content Provider 可 以 理 解 为 在 不 同 的 应 用 包 之 间 共 享 数 据 的 工 具 在 Android 中, 默 认 的 系 统 数 据 库 为 SQLite 但 是 在 Android 中, 使 用 方 法 略 有 区 别 在 Android 中, 每 一 个 应 用 都 单 独 运 行 在 各 自 的 进 程 中, 当 一 个 应 用 需 要 访 问 其 他 应 用 的 数 据 时, 这 里 就 需 要 在 不 同 的 虚 拟 机 之 间 传 递 数 据, 这 样 的 情 况 操 作 起 来 可 能 有 些 困 难 ( 正 常 情 况 下, 你 不 能 读 取 其 他 应 用 的 db 文 件 ) Content Provider 就 解 决 了 上 述 困 难 在 Android 中,Content Povider 是 一 个 特 殊 的 存 储 数 据 的 类 型, 它 提 供 了 一 套 标 准 的 接 口 用 来 获 取 和 操 作 数 据 并 且,Android 自 身 也 提 供 了 现 成 的 Content Provider:Contacts Browser CallLog Settings MediaStore 当 通 过 Content Resolver 提 供 的 方 法 来 使 用 Content Provider 时, 应 用 可 以 通 过 唯 一 的 Content Resolver interface 来 使 用 具 体 的 某 个 Content Provider 其 中,Content Resolver 提 供 的 方 法 包 括 query() insert() update() 等 要 使 用 这 些 方 法, 还 会 涉 及 URI 可 以 将 它 理 解 成 string 形 式 的 Content Provider 的 完 全 路 径 4.Service Service 即 服 务 的 意 思, 既 然 是 服 务, 那 么 Service 将 是 一 个 生 命 周 期 长 而 且 没 有 用 户 界 面 的 程 序 比 如, 一 个 正 在 从 播 放 列 表 中 播 放 歌 曲 的 媒 体 播 放 器, 在 这 个 媒 体 播 放 器 应 用 中, 应 该 会 有 多 个 Activity, 让 使 用 者 可 以 选 择 歌 曲 并 播 放 歌 曲 然 而, 音 乐 重 放 这 个 功 能 并 没 有 对 应 的 Activity, 因 为 使 用 者 会 认 为 在 导 航 到 其 他 屏 幕 时 音 乐 应 该 还 在 播 放 在 这 个 例 子 中, 媒 体 播 放 器 这 个 Activity 会 使 用 Context.Startservice() 来 启 动 一 个 Service, 从 而 可 以 在 后 台 保 持 音 乐 的 播 放 同 时, 系 统 也 将 保 持 这 个 Service 一 直 执 行, 直 到 这 个 Service 运 行 结 束 另 外, 还 可 以 通 过 使 用 Context.Bindservice() 方 法 连 接 到 一 个 Service 上 ( 如 果 这 个 Service 当 前 还 没 有 处 于 启 动 状 态, 则 将 启 动 它 ) 当 连 接 到 一 个 Service 之 后, 还 可 用 Service 提 供 的 接 口 与 它 进 行 通 信 以 媒 体 播 放 器 为 例, 还 可 以 执 行 暂 停 重 播 等 操 作 3.2 Android 程 序 UI 设 计 在 前 面 章 节 的 例 子 中, 我 们 已 经 接 触 了 TextView Button 等 UI 控 件, 其 实 这 里 所 说 的 UI 就 是 布 局 文 件 (layout),ui 是 一 个 应 用 程 序 展 现 给 用 户 的 界 面, 一 个 应 用 程 序 要 想 受 用 户 喜 爱, 那 么 UI 可 不 能 差 自 从 Android SDK 1.0_r2 版 本 开 始,ADT 提 供 了 UI 预 览 的 功 能 现 在 只 需 要 打 开 一 个 Android 项 目 的 /res/layout/main.xml 并 右 键 单 击 鼠 标 右 键, 在 弹 出 的 快 捷 菜 单 中 选 择 Open With Android Layout Editor 命 令, 或 者 直 接 双 击 main.xml 文 件, 即 可 以 切 换 到 UI 设 计 界 面, 如 图 3-4 所 示 9

图 3-4 Android Layout Editor 命 令 左 边 的 layouts 标 签 的 内 容 则 是 一 些 线 性 布 局, 可 以 使 用 它 轻 松 地 完 成 对 布 局 的 排 版, 比 如, 横 向 或 者 纵 向 布 局 Views 标 签 则 是 一 些 UI 控 件, 可 以 将 这 些 控 件 直 接 拖 动 到 右 边 的 窗 口 进 行 编 辑, 这 些 UI 控 件 的 类 型 如 图 3-5 所 示 图 3-5 Android layout Editor 当 然, 还 可 以 单 击 右 下 角 的 main.xml 标 签 来 切 换 到 XML 编 辑 器, 对 代 码 进 行 编 排, 如 图 3-6 所 示 将 这 些 功 能 配 合 起 来 使 用, 基 本 可 以 满 足 开 发 者 需 求 图 3-6 XML 编 辑 器 3.3 Java 语 言 在 Android 程 序 中 的 使 用 Android 应 用 程 序 采 用 Java 语 言 编 写,Java 语 法 和 C/C++ 有 很 大 的 相 似 性, 但 也 有 一 些 特 别 之 处 3.3.1 Interface 的 使 用 从 名 字 上 看,Interface 即 为 接 口 的 意 思, 多 用 于 实 现 回 调 (Call Back) 方 法 在 Interface 的 定 义 中, 一 般 的 代 码 架 构 如 代 码 清 单 3-14 所 示 public class InterfaceServer public interface OnClickListener public void onclick(); private OnClickListener monclicklistener=null; 代 码 清 单 3-14 InterfaceServer.java 10

public void onclick() if(monclicklistener!=null) monclicklistener.onclick(); public void setonclicklistener(onclicklistener l) monclicklistener = l; 对 于 Interface 内 部 的 方 法 而 言, 只 需 要 声 明, 而 不 需 要 具 体 实 现 从 编 译 器 的 角 度 来 看,Interface 会 被 认 为 是 一 个 指 向 方 法 的 指 针 使 用 InterfaceServer 的 代 码 一 般 如 代 码 清 单 3-15 所 示 public void addtobutton Button b = (Button)findViewById(R.id.button); onclicklistener l = new OnClickListener() 代 码 清 单 3-15 使 用 InterfaceServer public void onclick(view v) TextView tv1 = (TextView) findviewbyid(r.id.tv1); tv1.settext("the Button has been clicked"); ; b.setonclicklistener(l); 3.3.2 abstract class 的 使 用 abstract 是 一 个 修 饰 符, 其 类 似 于 Static 这 样 的 关 键 字 Android 程 序 中 常 用 abstract 修 饰 一 个 类, 如 abstract class, 当 然 能 它 也 可 以 修 饰 一 些 变 量 或 是 方 法 抽 象 类 所 包 含 的 方 法 可 以 只 是 定 义, 也 可 以 是 已 实 现 的 对 于 没 有 实 现 的 方 法, 基 于 该 方 法 的 子 类 必 须 实 现 ; 而 对 于 已 经 实 现 的 方 法, 子 类 可 以 重 写 该 方 法, 若 没 有 重 写, 则 使 用 父 类 的 方 法 在 一 定 程 度 上,abstract class 可 以 代 替 Interface, 例 如,3.3.1 节 中 Interface 的 例 子 做 如 下 的 abstract class 替 换, 其 效 果 是 等 价 的 public class InterfaceServer abstract class OnClickListener2 代 码 清 单 3-16 InterfaceServer.java public void onclick2(); private OnClickListener2 monclicklistener2=null; public void onclick2() if(monclicklistener2!=null) monclicklistener2.onclick2(); public void setonclicklistener2(onclicklistener2 l) monclicklistener2 = l; 3.3.3 Interface 与 abstract class 的 区 别 从 语 法 角 度 讲, 接 口 和 抽 象 类 有 以 下 区 别 Java 语 法 规 定, 一 个 子 类 只 能 有 一 个 父 类, 但 可 以 实 现 多 个 接 口 abstract class 可 以 代 替 Interface 定 义 Interface 时, 只 需 要 列 出 所 包 含 方 法 的 定 义 而 不 必 实 现 而 定 义 Abstract 类 时, 方 法 必 须 有 实 现 部 分, 这 就 是 所 谓 的 默 认 实 现, 除 非 该 方 法 也 是 Abstract 类 型 接 口 的 子 类 必 须 实 现 接 口 所 定 义 的 全 部 方 法, 而 抽 象 类 的 子 类 不 必 实 现 抽 象 类 所 定 义 的 任 何 方 法, 除 非 该 方 法 是 Abstract 或 者 子 类 想 重 写 某 个 方 法 11

接 口 中 的 成 员 变 量 必 须 是 Static Final 类 型 ( 实 际 应 用 中 则 很 少 包 含 变 量, 因 为 接 口 多 用 于 引 用 ), 而 abstract class 内 部 可 以 包 含 任 意 变 量 从 应 用 的 角 度 来 讲,Interface 和 abstract class 的 区 别 在 于 :Interface 提 供 了 一 个 方 法 集 合 的 接 口, 该 接 口 用 于 客 户 端 和 服 务 端 的 方 法 调 用, 如 图 3-7 所 示 图 3-7 Interface 的 使 用 机 制 接 口 一 般 是 由 服 务 端 定 义, 比 如 操 作 系 统, 客 户 端 根 据 自 己 的 需 求 对 接 口 做 不 同 的 实 现 ; 而 abstract class 则 仅 提 供 了 一 个 基 类, 该 基 类 没 有 任 何 服 务 端 或 者 客 户 端 的 概 念, 它 的 作 用 就 是 为 了 继 承 并 重 写, 如 图 3-8 所 示 3.3.4 for 循 环 的 使 用 图 3-8 abstract class 的 使 用 机 制 除 了 传 统 的 for 循 环 ( 语 法 是 for(inti=0;i<n;i++);) 以 外 还 有 foreach 循 环 举 例 如 代 码 清 单 3-17 所 示 public void dosomething() int[] ages = new int[20]; for(int age:ages) //to do,add something to process age. Log.i("Haiii". "The age is" +age); 代 码 清 单 3-17 For 循 环 语 法 该 for 语 法 是 对 某 个 集 合 进 行 循 环, 第 1 个 参 数 是 循 环 过 程 集 合 元 素 值 的 引 用, 第 2 个 参 数 是 集 合 对 象 第 1 个 参 数 的 类 型 必 须 和 集 合 元 素 的 类 型 相 同 以 下 代 码 示 例 了 传 统 的 for 语 法 和 新 for 语 法 的 等 效 使 用, 但 由 于 编 译 器 对 新 for 语 法 的 优 化, 其 执 行 效 率 将 更 高 public void dosomething() int[] counts =new int[20]; int total1=0,total2=0; for(int i=0;i<20;i++) total1 += counts[i]; for(int count:counts) 代 码 清 单 3-18 传 统 for 语 法 和 新 for 语 法 比 较 12

total2 += count; 3.3.5 Map 类 的 使 用 在 Android 系 统 中, 有 着 多 种 存 储 数 据 的 方 式, 例 如, 文 件 数 据 库 及 程 序 内 参 数 式 存 储 网 络 存 储 等 对 于 参 数 式 存 储 时, 使 用 的 就 是 Map 类 Map 本 身 是 Interface,Java 基 于 该 接 口 实 现 三 个 具 体 的 Map 类, 分 别 是 HashMap TreeMap, 以 及 EnumMap, 常 用 的 为 HashMap, 本 节 也 主 要 介 绍 HashMap Map 定 义 了 访 问 特 定 集 合 的 标 准 方 法, 这 种 集 合 用 来 存 储 key-value 类 型 的 键 值 对, 比 如, 对 于 name:haiii 和 age:22 这 两 组 数 据 来 讲, 其 中 name age 称 为 键 (key), 与 此 对 应 的 是 键 值 (value) 在 一 个 Map 集 合 类 中, 每 对 键 或 值 其 类 型 都 可 以 是 任 意 的, 比 如 int String 等 都 是 可 以 的 Map 类 又 是 一 个 类 模 板, 一 个 Map 类 对 象 在 初 始 化 时 必 须 指 定 键 的 类 型, 可 以 是 任 何 Object 类, 比 如,Map<String,Object> mmap= new HashMap<String,Object>() <> 里 面 的 数 据 类 型 用 于 指 定 Map 集 合 中 键 值 对 的 类 型 给 Map 集 合 添 加 和 删 除 键 值 对 的 方 法 如 表 3-2 所 示 表 3-2 Map 集 合 添 加 和 删 除 键 值 对 的 方 法 方 法 描 述 clear() remove(objectkey) put(objectkey,objectvalue) putall(mapmap) 删 除 该 Map 集 合 中 的 全 部 元 素 删 除 键 名 为 key 所 对 应 的 键 值 对 添 加 一 个 新 的 键 值 对 将 该 Map 集 合 的 元 素 全 部 复 制 到 新 的 Map 中 Map 类 没 有 提 供 直 接 遍 历 键 值 对 的 方 法, 要 遍 历 所 有 键 值 对 需 要 一 个 中 间 过 程 Map 提 供 了 3 个 方 法 用 于 间 接 遍 历 键 值 对, 如 下 : entryset() 返 回 所 有 键 值 对 类 型 为 Set 对 象 keyset() 返 回 所 有 键 值 对 类 型 为 Set 对 象 valueset() 返 回 所 有 键 值 对 类 型 为 Collection 对 象 要 得 到 具 体 的 键 值 对, 需 要 再 解 析 Set 和 Collection 对 象, 但 仅 有 这 两 个 对 象 还 不 能 获 得 键 值 对, 还 需 要 借 助 于 Iterator 类 到 这 里, 可 能 觉 得 有 些 复 杂, 别 着 急, 结 果 马 上 就 要 出 来 了 Set Collection Iterator 实 际 上 是 Map 内 部 进 行 操 作 的 3 个 辅 助 类, 要 得 到 具 体 Map 键 值 对, 如 代 码 清 单 3-19 所 示 代 码 清 单 3-19 得 到 具 体 的 Map 键 值 对 Map<String,Object> mmap = new HashMap<String,Object>(); Iterator kv = mmap.entryset().iterator(); Iterator k = mmap.keyset().iterator(); Iterator v = mmap.values().iterator(); Int size = mmap.size(); for(int i = 0;i<size;i++) Map.Entryentry = (Map.Entry)kv.next(); Object key = entry.getkey(); Object value = entry.getvalue(); 用 以 上 代 码 读 取 键 值 对 时,Object 可 以 强 制 转 换 为 int 类 型 3.3.6 Integer 与 String 之 间 的 转 换 在 实 际 程 序 设 计 中, 经 常 需 要 把 Integer 类 型 转 换 为 String 类 型, 或 者 相 反,Java 类 库 中 提 供 了 这 样 的 方 法 13

专 业 始 于 专 注 卓 识 源 于 远 见 整 形 转 换 为 字 符 串 :String.valueOf(Stringstr) 字 符 串 转 换 为 整 形 :Integer.parseInt(int) Interger.parseLong(long) 等 面 向 对 象 编 程 中, 一 般 不 能 直 接 调 用 类 中 的 方 法, 而 是 需 要 先 定 义 类 的 一 个 对 象, 然 后 才 能 使 用 其 包 含 的 方 法 而 以 上 两 个 方 法 直 接 调 用 String 和 Integer 的 方 法, 这 就 是 static 关 键 字 的 作 用 在 定 义 一 个 类 时, 如 果 其 中 的 方 法 声 明 为 static, 那 么 外 部 程 序 就 可 以 直 接 调 用 该 方 法, 该 方 法 所 引 用 的 一 些 变 量 也 必 须 为 static 类 型 的 变 量 Java 内 部 有 一 种 安 全 机 制 : 对 于 一 个 普 通 的 类, 必 须 声 明 该 类 的 对 象 才 能 访 问 类 中 的 方 法 或 者 变 量, 实 现 这 种 安 全 机 制 的 是 Java 编 译 器 编 译 器 隐 藏 了 所 有 类 的 地 址, 因 此 不 能 通 过 类 名 称 定 位 到 类 的 地 址 ; 而 如 果 使 用 static 修 饰 符, 无 论 是 变 量 还 是 方 法, 编 译 器 都 会 把 该 变 量 或 者 方 法 的 名 称 导 出, 以 便 程 序 能 够 根 据 类 名 定 位 到 类 所 在 的 地 址, 从 而 能 够 调 用 相 应 的 方 法 或 者 变 量 3.3.7 synchronized 同 步 关 键 字 synchronized 关 键 字 属 于 操 作 系 统 的 范 畴, 与 同 步 对 应 的 是 异 步 在 程 序 设 计 的 概 念 中, 有 同 步 调 用 或 者 异 步 调 用, 同 步 是 指 该 段 代 码 ( 方 法 ) 从 调 用 开 始, 直 到 内 部 执 行 完 毕 后 才 能 返 回 ; 异 步 调 用 是 指 调 用 该 段 代 码 ( 方 法 ) 后 立 即 返 回, 无 论 该 段 代 码 内 部 所 执 行 的 物 理 操 作 是 否 执 行 完 毕, 异 步 代 码 一 般 存 在 于 多 线 程 程 序 设 计 中, 单 线 程 程 序 内 部 不 存 在 异 步 调 用 synchronized 关 键 字 的 作 用 就 是 告 诉 操 作 系 统, 在 执 行 该 关 键 字 所 限 定 的 代 码 片 段 内, 不 允 许 被 其 他 线 程 打 断 在 一 般 的 操 作 系 统 设 计 中, 会 提 供 一 个 类 似 于 synchronized 的 API 方 法, 而 Java 则 是 给 了 这 样 一 个 关 键 字, 相 当 于 说,Java 编 译 器 为 操 作 系 统 分 担 了 一 部 分 工 作 那 么, 什 么 情 况 下 需 要 使 用 synchronized 关 键 字 呢? 凡 是 需 要 某 段 代 码 在 执 行 时 不 被 其 他 线 程 打 断 时, 都 可 以 加 上 synchronized 关 键 字, 举 例 如 代 码 清 单 3-20 所 示 public class MyMusicWidgetProvider 代 码 清 单 3-20 synchronized 关 键 字 private static MyMusicWidgetProvider sinstance; static synchronized MyMusicWidgetProvider getinstance() if(sinstance==null) sinstance=new MyMusicWidgetProvider(); returnsinstance; 以 上 代 码 定 义 了 一 个 类, 并 希 望 该 类 在 运 行 时 仅 有 一 个 实 例, 每 次 调 用 该 类 所 包 含 的 方 法 时, 先 得 到 该 类 的 实 例, 然 后 再 通 过 实 例 调 用 其 他 方 法 该 类 有 一 个 static 的 getinstance() 方 法, 该 方 法 的 作 用 就 是 检 查 是 否 存 在 一 个 实 例, 如 果 没 有 就 创 建 一 个, 否 则 返 回 存 在 的 实 例 getinstance() 方 法 前 面 加 了 synchronized 关 键 字, 为 的 是 该 方 法 在 执 行 时 不 能 被 其 他 线 程 打 断, 那 么, 为 什 么 有 这 样 的 要 求 呢? 试 想 一 下, 假 设 没 有 使 用 该 关 键 字, 第 1 个 线 程 A 在 执 行 getinstance() 方 法 时, 方 法 体 中 的 new 运 算 符 刚 刚 创 建 了 一 个 MyMusicWidgetProvider 实 例, 但 还 没 来 得 及 把 实 例 赋 值 给 sinstance, 而 此 时 B 线 程 又 来 调 用 getinstance() 方 法, 出 现 这 种 情 况 的 原 因 是 :sinstance= new MyMusicWidgetProvider() 这 句 代 码 会 被 Java 编 译 器 编 译 成 多 条 机 器 指 令, 其 中 给 sinstance 赋 值 的 机 器 指 令 和 创 建 一 个 MyMusicWidgetProvider 对 象 的 机 器 指 令 是 分 开 的 此 时 对 于 B 线 程 来 讲, 它 会 重 新 检 查 sinstance 是 否 为 空, 由 于 A 线 程 还 没 有 来 得 及 给 sintance 赋 值, 因 此,B 线 程 就 会 再 次 创 建 一 个 新 的 MyMusicWidgetProvider 实 例, 当 B 线 程 暂 停 并 返 回 A 线 程 时,A 线 程 会 把 第 1 次 创 建 的 实 例 重 新 赋 值 给 sinstance, 这 就 会 导 致 B 线 程 将 来 对 MyMusicWidgetProvider 实 例 的 错 误 引 用, 因 为 B 线 程 所 创 建 实 例 的 地 址 被 A 线 程 修 改 了 因 此, 这 就 要 求 getinstance() 一 旦 开 始 执 行, 必 须 执 行 完 毕 后 才 能 返 回, 中 间 不 能 被 其 他 线 程 打 断 sychronized 除 了 约 束 整 个 方 法 外, 也 可 以 约 束 一 小 段 代 码, 这 样 做 的 好 处 有 两 个 : 一 个 是 可 以 避 免 定 义 新 方 法 ; 另 一 个 是 能 够 避 免 一 些 线 程 同 步 问 题, 如 代 码 清 单 3-21 所 示 Object obj; 代 码 清 单 3-21 synchronized 约 束 小 段 代 码 14

int c; void addmethod() synchronized(obj) c++; // 其 他 代 码 obj 可 以 是 任 意 类 型 的 一 个 对 象, 该 对 象 的 唯 一 作 用 就 是 给 synchronized 提 供 一 个 锁 同 步 设 计 的 原 则 之 一 是 尽 量 减 少 同 步 中 包 含 的 代 码 大 小, 从 而 在 线 程 间 能 够 更 平 衡 地 运 行 因 此, 同 步 一 小 段 代 码 是 一 个 不 错 的 做 法 同 时, 假 设 addmethod() 内 部 还 调 用 了 其 他 同 步 方 法, 那 么, 从 这 个 同 步 跳 到 另 外 的 同 步 会 增 加 线 程 间 死 锁 的 风 险, 因 此 不 同 步 整 个 addmethod() 而 仅 同 步 局 部 代 码, 这 就 是 第 2 个 好 处 3.3.8 new 的 使 用 Java 语 言 中,new 的 作 用 是 为 一 个 对 象 (Object) 分 配 内 存, 代 码 清 单 3-22 说 明 了 为 各 种 Object 分 配 内 存 的 方 法 int a = 20; int A[]= new int[100]; float A2[]= new float[100]; int A3[]= 10,20,30; String str = new String(); String str1 = ; String str2 = null; String[] Str = new String[100]; 代 码 清 单 3-22 为 各 种 Object 分 配 内 存 的 方 法 MyMusicWidgetProvider myprovider = new MyMusicWidgetProvider(); str1 += "Android is from... "; MyMusicWidgetProvider commonprovider= myprovider.getinstance() 一 般 情 况 下, 没 有 用 new 修 饰 符 定 义 的 数 据 都 是 在 栈 (Stack) 中 分 配 内 存, 但 有 一 个 例 外, 对 于 String 定 义 的 变 量, 总 是 从 系 统 内 存 堆 (Heap) 中 分 配 内 存, 栈 中 仅 有 对 该 String 的 引 用 另 外, 从 系 统 堆 中 分 配 的 实 际 内 存 大 小 并 不 是 按 指 定 的 大 小 分 配 的, 比 如,int A[]=new int[100] 所 分 配 的 内 存 大 小 并 不 是 100B, 而 是 128B, 内 存 分 配 机 制 为 了 提 高 分 配 效 率 以 及 分 配 算 法 的 可 实 现 性, 实 际 上 的 内 存 颗 粒 大 小 会 按 照 2 的 幂 次 方 进 行 划 分, 实 际 分 配 的 内 存 大 小 是 最 接 近 指 定 大 小 的 一 个 值 另 外, 最 小 的 内 存 颗 粒 大 小 会 根 据 不 同 的 内 存 分 配 算 法 有 所 不 同, 一 般 会 取 512B 或 者 1KB 问 : 在 Android 上 使 用 Java 与 在 PC 上 使 用 Java 的 编 程 风 格 有 何 差 别? 答 :Android 是 一 种 嵌 入 式 系 统, 在 追 求 程 序 效 率 降 低 所 需 资 源 上 是 孜 孜 不 倦 的, 程 序 员 心 中 始 终 要 有 该 意 识 在 PC 上 进 行 编 程 时, 清 晰 完 整 的 程 序 结 构 比 运 行 效 率 显 得 更 重 要, 因 此, 程 序 结 构 上 经 常 呈 现 多 层 结 构, 比 如 getter setter 等 ; 而 在 Android 上 编 程 时, 尽 管 需 要 清 晰 的 程 序 结 构, 但 对 于 一 些 小 的 结 构, 则 是 效 率 重 于 结 构 因 此, 能 在 一 个 函 数 或 引 用 中 实 现 的 功 能 就 要 避 免 进 行 多 层 嵌 套 调 用 3.4 本 章 小 结 本 章 主 要 介 绍 了 Android 应 用 程 序 框 架 UI 设 计, 以 及 Java 在 Android 程 序 中 的 使 用 首 先 彻 底 地 分 析 了 上 一 章 的 AndroidTest 项 目, 从 其 项 目 目 录 结 构 文 件 功 能 等 方 面 分 析 了 Android 应 用 程 序 的 基 本 框 架, 其 次 逐 一 分 析 了 Android 应 用 程 序 的 构 成, 并 分 别 通 过 示 例 程 序 演 示 了 其 功 能 的 运 用 其 次 介 绍 了 有 关 UI 设 计 的 工 具, 使 得 程 序 界 面 更 加 漂 亮 最 后 介 绍 了 在 Android 程 序 中 Java 语 法 的 使 用 关 键 知 识 点 测 评 15

法 1. 以 下 有 关 Android 程 序 目 录 结 构 的 说 法, 不 正 确 一 个 是 ( ) A.Android 程 序 中 包 含 其 他 Java 项 目 中 没 有 的 gen 文 件 夹 B.AndroidManfest.xml 文 件 则 包 含 了 该 项 目 中 所 使 用 的 Activity Service Receiver C. 程 序 的 布 局 文 件 (layout) 中 配 置 了 程 序 的 线 性 版 面, 视 图 位 置 高 度 等 D.R.java 文 件 可 以 更 改, 被 编 辑 2. 以 下 有 关 Android 应 用 的 叙 述, 正 确 的 一 个 是 ( ) A. 所 有 的 Android 应 用 程 序 都 有 Activity Intent Content Provider Service 4 个 模 块 构 造 而 成 B. 一 个 活 动 (Activity) 通 常 就 是 一 个 单 独 的 屏 幕, 它 不 需 要 继 承 其 他 基 类 C.Intent 可 以 实 现 Activity 与 Activity 之 间 的 切 换 件 D.Service 能 够 让 其 他 的 应 用 保 存 或 读 取 此 内 容 提 供 器 处 理 的 各 种 数 据 类 型 3. 以 下 有 关 interface 与 abstract class 区 别 的 描 述, 不 正 确 的 是 ( ) A. 定 义 abstract 类 时, 所 有 方 法 不 需 要 有 实 现 部 分 B. 一 个 子 类 只 能 有 一 个 父 类, 但 可 以 实 现 多 个 接 口 C. 接 口 中 的 成 员 变 量 必 须 是 static final, 而 Abstract class 内 部 可 以 包 含 任 意 变 量 D. 接 口 的 子 类 必 须 实 现 接 口 所 定 义 的 全 部 方 法, 而 抽 象 类 的 子 类 不 必 实 现 抽 象 类 所 定 义 的 任 何 方 联 系 方 式 集 团 官 网 :www.hqyj.com 嵌 入 式 学 院 :www.embedu.org 移 动 互 联 网 学 院 :www.3g-edu.org 企 业 学 院 :www.farsight.com.cn 物 联 网 学 院 :www.topsight.cn 研 发 中 心 :dev.hqyj.com 集 团 总 部 地 址 : 北 京 市 海 淀 区 西 三 旗 悦 秀 路 北 京 明 园 大 学 校 内 华 清 远 见 教 育 集 团 北 京 地 址 : 北 京 市 海 淀 区 西 三 旗 悦 秀 路 北 京 明 园 大 学 校 区, 电 话 :010-82600386/5 上 海 地 址 : 上 海 市 徐 汇 区 漕 溪 路 250 号 银 海 大 厦 11 层 B 区, 电 话 :021-54485127 深 圳 地 址 : 深 圳 市 龙 华 新 区 人 民 北 路 美 丽 AAA 大 厦 15 层, 电 话 :0755-22193762 成 都 地 址 : 成 都 市 武 侯 区 科 华 北 路 99 号 科 华 大 厦 6 层, 电 话 :028-85405115 南 京 地 址 : 南 京 市 白 下 区 汉 中 路 185 号 鸿 运 大 厦 10 层, 电 话 :025-86551900 武 汉 地 址 : 武 汉 市 工 程 大 学 卓 刀 泉 校 区 科 技 孵 化 器 大 楼 8 层, 电 话 :027-87804688 西 安 地 址 : 西 安 市 高 新 区 高 新 一 路 12 号 创 业 大 厦 D3 楼 5 层, 电 话 :029-68785218 16