踏莎寻·紫韵
Android
Page1
踏踏踏莎莎莎寻寻寻···紫紫紫韵韵韵
之 Android
Android 总览:
第一章 基础开发
第二章 多媒体开发
第三章 高级进阶
序:
作品名称:踏莎寻·紫韵 之 Android
开始日期:2011 年 9 月 23 日星期五 13 时 3 分 28 秒
注:
1. 本书一些地方为了讲明白知识,说法可能不严谨,但主旨是,希望帮助您理解问题。
2. 本书并不是一个入门书籍,而只是将作者本人的学习经验写出。本书中一些知识点参考
自其他书籍、博客,版权归原作者所有。
3. 作者本人是一个程序员,所以本套书籍所有的知识都是围绕编程展开的。所以对于计算
机网络、多媒体等部分的内容不会过于深入讲解。
4. 本人水品有限,如果有错误之处,请您联系给予批评。
5. 本套书籍会不定时的更新、修改书中的错误,所以,您手中的可能不是最新版的,因此,
不要对我们踏莎寻失望,请:“相信品牌的力量”。
6. 您可以留着自己看,但是请不要往“百度文库”等地方上传,然后赚取利益。这是对作
者的不尊重,已经侵犯了作者的作品“发表权”。
联系方式:1021299802@qq.com
第一部分 基础开发
知识结构:
第一章 基础入门
第二章 页面控件
第三章 数据存取
第四章 网络编程
第五章 Android 组件
最后修改日期:2012 年 2 月 6 日星期一
16 时 27 分 21 秒
踏莎寻·紫韵
Android
Page2
第一章 基础入门
概述
Android 英文含义为: 男性机器人,中文名称为安卓。
Android 是 Google 公司的产品。它是一个运行在 Linux 操作系统内核(kernel) 上的开放
手机平台(即开放源代码) 的操作系统。
Android 系统可以运行在手机、平板电脑等设备上。
在手机设备中,Android 操作系统的地位与 WindowsMobile、Symbian 等其它手机操作
系 统 处 在 同 一 级 别 。 常 见 的 智 能 手 机 操 作 系 统 有 :Symbian, Windows Mobile, RIM
BlackBerry, Android, iPhone, Java/J2ME。
Google 公司在 Android 系统中内置了很多应用软件,如打电话、发短信软件。
目前,Android 系统中运行的应用程序都是使用 Java 程序语言来编写。
提示:
Android 开发属于客户端开发,JavaEE 开发属于服务器端开发。
系统架构
Android 的系统架构和其他操作系统一样,采用了分层的架构。Android 操作系统被分为四
个层次,每一层都是为上层服务,各层次由内向外依次为:
|- Linux Kernel 层
|- Libraries 和 Android Runtime 层
|- application framework 层
|- applications 层
提示:此图可放大后观看。
最后修改日期:2012 年 2 月 6 日星期一
16 时 27 分 21 秒
踏莎寻·紫韵
Android
Page3
Linux Kernel 层:
|- 在 linux 内核层中提供的各种驱动和管理程序都是由 C/C++语言编写的,这些程序为
Libraries 和 Android Runtime 层的程序提供服务。
Libraries 和 Android Runtime 层:
|- Libraries(库) :Android 包含一些 C/C++ 库,这些库能被 Android 系统中不同的组件
使用。比如应用程序框架层中的框架会通过 JNI 技术调用 Libraries 提供的函数库:
|- FreeType 用于位图(bitmap)和矢量(vector)字体显示。
|- SQLite 是一个在手机等移动设备中通用的关系型数据库引擎。
|- WebKit/LibWebCore 是 Android 中内置的 Web 浏览器引擎。
|- Android Runtime (Android 运行环境):
|- Android 运行环境又分为两部分:核心库和 Dalvik 虚拟机。
|- 核心库中提供了 JavaSE 核心类库的大多数类(但并不是全部,如 Android 不支持
JavaSE 的 Swing 编程)。
|- Dalvik 是 Google 公司自己设计的用于 Android 平台的 Java 虚拟机。Android 系统
中的应用程序是运行在 Android 自身的 Dalvik 虚拟机上的,而不是运行在 Java VM 之上。
Dalvik 虚拟机:
|- Dalvik 虚拟机中执行的同样是字节码文件。但字节码文件的后缀名为 .dex 。
|- dex 格式是专为 Dalvik 设计的一种压缩格式,其针对小内存使用做了优化,适合内存
和处理器速度有限的系统。
|- dex 文件格式可以减少整体文件尺寸,提高 I/O 操作的类查找速度。
|- odex 是为了在运行过程中进一步提高性能,对 dex 文件的进一步优化。
|- Dalvik 虚拟机依赖于 Linux 内核的一些功能,比如线程机制和底层内存管理机制。
|- 在 Android 系统中可以同时运行多个应用程序,每个应用程序都会开启一个独立的进程,
在每个进程中有一个 Dalvik 虚拟机的实例,应用程序只能在它自己的 Dalvik VM 实例中运
行。 应用程序占据独立的进程可以防止在某个虚拟机崩溃的时候导致 Android 系统内的所
有程序都被关闭。
资料:
Dalvik 基于 CPU 中的寄存器,而 Java VM 基于内存中的栈。基于寄存器的虚拟机对于更
大的程序来说,在它们编译的时候,花费的时间更短。
Dex 文件的产生:
|- 首先,使用 Java 语言编写源文件,并将源文件编译生成.class 文件。
|- 然后,使用 Android SDK 中的 dx 工具把编译后得到的多个.class 文件转换为一个 jar 文
件,然后 dx 工具会自动的再将 jar 文件优化压缩为一个.dex 文件。
|- dex 是 Dalvik VM executes 的缩写,即 Android Dalvik 执行程序,它是 Dalvik 的字节
码。
application framework 层:
|- 提供使用 Java 编写的各种框架,以供应用程序员在程序中调用,本层中的代码由 Java 语
言编写。
最后修改日期:2012 年 2 月 6 日星期一
16 时 27 分 21 秒
踏莎寻·紫韵
Android
Page4
applications 层:
|- 此层中的应用程序是由应用程序员编写或系统内置的。
Android 的其他特性:
|- 集成的浏览器 基于开源的 WebKit 引擎。
|- 优化的图形库 基于 OpenGL ES 1.0 定制的 2D/3D 图形库。
|- SQLite 数据库用作结构化的数据存储。
|- 多媒体支持 包括常见的音频、视频和静态图像格式。
四大组件
Android 中提供了四大组件:Activity、BroadcastReceiver、ContentProvider、Service。
活动(Activity):
在 Android 中,一个 Activity 就是一个用户界面。Activity 和 HTML、JSP 文件类似,代表一
个“视图” 视图用于将信息通过“控件”显示给用户看。在 Activity 中可以添加各种各样
的控件(如按钮、文本框等)。
各种语言开发的 GUI 应用程序都是由多个视图组成,程序会在多个视图之间来回的跳转。
视图之间还可以通过传递参数和获取返回值的方式进行数据的交互。在 Android 中也可以实
现多个 Activity 之间的切换、数据传递。
广播接收者(BroadcastReceiver):
在 Android 系统中,当用户手机接到外界的电话、短信的时候,系统内部就会自动产生相应
的广播。然后广播将会被系统发送给需要此广播的应用软件。
广播接收者,是应用程序中用来接收广播的一个组件。广播既可以使系统发出的,也可以是
当前或者其他应用程序发出的。一个应用程序内部可以定义多个广播接收者。当系统发送广
播时,每个应用程序的广播接收者都会查看该广播是否是其所需要的,若是,则广播接收者
将会接收该广播。
由于在系统内置的电话和短信的软件中,就定义了广播接收者,所以,当用户手机接到外界
的电话、短信时这两个软件会接收到系统广播。软件接到广播后,就可以做出相应的操作。
比如短信软件会提示用户有新短信到来等。
其实,系统发出的广播任何有权限的软件都可以接收到。
只要在用户开发的软件中定义了一个用来“接收短信”的广播接收者后,当手机来短信时,
用户开发的软件和系统内置的短信软件都会接收到系统的广播。
广播接收者接收广播时是有优先级的,优先级高的接收者会先接到广播。
先接到广播的应用程序,可以将广播给拦截下来。 从而使其他程序无法获得系统的广播。
垃圾短信过滤器就是利用了广播接收者的优先级将短息拦截下来,使系统内置的短信软件无
法接到系统广播,以此来达到屏蔽垃圾短信的目的。
内容提供者(ContentProvider):
最后修改日期:2012 年 2 月 6 日星期一
16 时 27 分 21 秒
踏莎寻·紫韵
Android
Page5
在 Android 中应用程序的数据可以保存在文件或 SQLite 数据库中。
数据对于每个应用程序来说都应该是私有的。应用程序 A 若想访问应用程序 B 的数据,则
必须要经过 B 的同意。
退一步说,若是应用 B 允许应用 A 直接通过 IO 等方式操作应用 B 的数据,那么应用 B 的
数据的安全性就大大降低了。若应用 A 是个恶意程序,此时它会利用这个特点胡乱修改应
用 B 的数据,这是绝对不允许的。
因此若需要在程序 A 和 B 之间进行数据的交换,则就需要同时运行 A 和 B,然后再交换数
据。这样一来,A 所进行的操作都会被 B 所“看”到,B 也可以对 A 所进行的操作进行限
制。
然而每个应用程序都是运行在自己的进程中,当应用 A 需要访问应用 B 的数据时,数据就
需要在不同的虚拟机之间传递。这样操作起来可能就很困难。
此时可以使用内容提供者,它能在不同的应用程序之间方便的传递数据。
如:手机中的通讯录也是一个应用程序,有时候需要在用户程序中获取通讯录的数据,此时
就可以使用内容提供者。 反过来,当用户程序需要向外界提供数据的时候,也可以通过内
容提供者来完成。
服务(Service):
与 PC 机上的 Window 操作系统一样,在 Android 中也存在服务。Android 中的服务主要用于
保证耗时的操作正常执行完成。服务是没有界面的,它运行在程序的后台。
通常,应用程序中一些耗时的操作会被放置在一个线程中运行。 虽然线程可以在四大组件
中的任何一个组件中启动,但是在一些特殊的应用场景下,线程就必须要在服务中启动。
若线程在 Activity、广播接收者、内容提供者中启动,当 Activity 被关闭、广播接收者处理
完广播或者内容提供者提供完数据后,他们三者就会被销毁。 虽然他们销毁后不会立刻导
致在其内部开启的线程被终止,但是在系统内存不足时,虚拟机就会回收那些没有引用的线
程对象。若那时线程并没有执行完毕,则就会导致无法预计的错误。
比如:音乐播放器通常需要后台播放,若在 Activity 中开启播放音乐的线程,那么当 Activity
被关闭且系统内存不足时,音乐播放可能就会停止了。
服务的开启和关闭可以由程序控制,由于服务没有用户界面、生命周期长,因此在其内部开
启的线程不会被回收掉。
扩展类库
android 提供一些扩展的 JAVA 类库,类库分为若干个包,每个包中包含若干个类。
android.app :提供高层的程序模型、提供基本的运行环境。
android.content :包含各种的对设备上的数据进行访问和发布的类。
android.database :通过内容提供者浏览和操作数据库。
android.graphics :底层的图形库,包含画布,颜色过滤,点,矩形,可以将他们直接绘制
到屏幕上。
android.location :定位和相关服务的类。
最后修改日期:2012 年 2 月 6 日星期一
16 时 27 分 21 秒
踏莎寻·紫韵
Android
Page6
android.media :提供一些类管理多种音频、视频的媒体接口。
android.net :提供帮助网络访问的类,超过通常的 java.net.* 接口。
android.os :提供了系统服务、消息传输、 IPC 机制。
android.opengl :提供 OpenGL 的工具。
android.provider :提供类访问 Android 的内容提供者。
android.telephony :提供与拨打电话相关的 API 交互。
android.view :提供基础的用户界面接口框架。
android.util :涉及工具性的方法,例如时间日期的操作。
android.webkit :默认浏览器操作接口。
android.widget :包含各种 UI 元素(大部分是可见的)在应用程序的屏幕中使用。
Android 工程
搭建开发环境
|- 首先,安装 Java 开发工具(JDK5 或 JDK6) ,由于需要编译 Java 源程序,所以只安装 Java
运行环境 (JRE) 是不够的。
|- 然后,安装 Eclipse 。
|- 接着,安装 ADT 插件(可选,一般都会安装) 。
|- ADT(Android Development Toolsplugin) 基于 Eclipse 的 Android 开发工具扩充套件。
ADT 插件可以让用户快速的在 Eclipse 中建立一个 Android 项目。
|- 最后,安装 Android SDK(必选)。
|- Android SDK(Software Development Kit)软件开发工具,和 JDK 一样,Android SDK
提供了在 Android 平台使用 java 语言进行 android 应用程序开发必须的工具和 API 接口(类)。
|- 在 Android SDK 中也包含 Android 手机模拟器 (Emulator) ,通过使用手机模拟器,可
以使 Android 应用程序直接在计算机中运行。通常把 Android 手机模拟器称作 Android 虚拟
设备(AndroidVirtual Device), 简写为 AVD 。
提示:
Android SDK,能在 Windows 、 Mac OS X 、 Linux 等多个平台上使用 。
新建应用程序
首先,File new other android Android Project 。
然后,在 Project name 中输入项目的名称:
然后,在 Contents 栏中选择第一项,表示将当前项目建立在当前工作空间中。
最后修改日期:2012 年 2 月 6 日星期一
16 时 27 分 21 秒
踏莎寻·紫韵
Android
Page7
然后,在 BuildTarget 栏中选择 Android2.2,表示当前项目是基于 Android2.2 版本操作系统
开发的。
然后,在 Properties 栏中依次填写如下属性:
|- application name :指出当前应用程序(在手机主菜单中显示)的名称。
|- package name :当前应用程序的核心包的包名。此包名就像是人的身份证一样,用于唯
一标识一个应用程序。也就说在同一台手机中,只能安装一个核心包的名称为 org.cxy.tomcat
的应用程序。若安装多个核心包具有相同名称的应用程序,则后安装的会覆盖掉原来的程序。
即会先卸载原来的程序。
|- create activity : 在 Android 中一个 Activity 就是一个视图。此项用来选择是否自动建立
一个 Activity 作为当前应用程序的主 Activity (最先显示的 Activity) 。主 Activity 也被称为入
口 Activity ,它相当于 JavaSE 里面的 main 方法。
|- Min SDK Version :指出当前应用程序运行所需要的 SDK 的最低版本。若不写,则默认
为 Android2.0 版本。
提示:上述建立 Android 工程的步骤在不同版本的 ADT 插件中会略有不同。
应用程序结构
在 Eclipse 中新创建一个 Android 应用程序,最初其内具有如下文件:
|- src 目录:与 Java Project 一样,此文件夹用于存放程序员编写的源(.java)文件。。
|- gen 目录:存放 R.java 和 AIDL 等文件。
|- res 目录:存放资源文件,此目录下的文件发生变化会导致 R 文件发生变化。
|- Assets 目录:用于存放应用程序的源文件。
|- AndroidManifest.xml 文件:当前应用程序的清单文件。
|- project.properties 文件:指出运行当前应用程序需要的环境信息。如应用程序运行时所需
要 Adroid 系统的最低版本号。
|- project.cfg 文件:为 ADT 指明混淆 apk 时的配置信息。
最后修改日期:2012 年 2 月 6 日星期一
16 时 27 分 21 秒
踏莎寻·紫韵
Android
Page8
gen 目录:
此目录中的所有源文件都由 ADT 插件自动生成,不需要程序员书写。
创建新项目时 ADT 会在 gen 文件夹内创建核心包,并在核心包内创建一个 R . java 文件。
R.java 在 Android 应用中起到“字典” 的作用,当咱们向 res 的某个子目录中中放入 xml
描述文件、图片等资源时,ADT 插件会为该资源生成一个 Int 类型的 id,同时还会为该资
源创建一个 int 类型变量,以文件的名称为变量名,以 id 为变量值,然后将变量写入到 R.java
中,在程序中,通过 R.java 可以很方便地找到对应资源。
提示:不要修改此文件夹内的任何文件。
res 目录:
当前应用可能使用到的各种资源都存放在此目录中,如 xml 界面文件,图片或数据。
子文件夹名称 描述
drawable
layout
用于存放 png、jpg 等图像资源。
用于存放 xml 格式的用户界面文件。(也称为布局文件)
用于存放 xml 格式的数据文件。这些文件中保存了在当前应用中会使用到
的各种类型的数据,不同类型的数据一般会存放在不同的 xml 文件中。
values
drawable 下有三个子文件夹:drawable-hdpi、drawable-mdpi、drawable-ldpi 。
|- drawable-hdpi 里面存放高分辨率的图片,如 WVGA (480x800),FWVGA (480x854) 。
|- drawable-mdpi 里面存放中等分辨率的图片,如 HVGA (320x480) 。
|- drawable-ldpi 里面存放低分辨率的图片,如 QVGA (240x320) 。
当在程序中需要显示某张图片时,Android 系统会根据当前机器的分辨率来分别到这几个文
件夹里面去找对应的图片。建议各自文件夹根据需求均存放不同版本(大小)的图片。
layout 文件夹:
|- 在 Android 中,每个 Activity 就是一个用户界面,界面内的组件以及界面所使用的布局
一般都是由 xml 文件来构建的。在 Android 中 xml 布局文件主要用于显示用户操作界面。
|- 提示:Android 也可以向 Swing 那样直接在 Java 程序中通过代码来动态的构建用户界面。
values 文件夹:
|- 此文件夹用来定义程序内要使用到的字符串、尺寸、样式、颜色、数组等数据。这些数
据保存在 xml 文件中。通常每种类型的数据都单独建立一个 xml 文件。
|- 字符串数据(strings.xml)、数组数据(arrays.xml)、颜色数据(colors.xml)。
|- 属性数据(attrs.xml)、样式数据(styles.xml)、尺寸数据(dimens.xml)。
xml 文件夹:
|- 用来保存 xml 文件,这些 xml 在编译 apk 时,最终会被编译成二进制形式的。
raw 文件夹:
|- 用来保存应用使用到的原始文件。这里的文件会原封不动的放入 apk 包中,不会被编译
为二进制形式,访问的方式也是通过 R 类。
最后修改日期:2012 年 2 月 6 日星期一
16 时 27 分 21 秒