1、手机平台应用开发手机平台应用开发全册配套课件全册配套课件Internet3/48课程介绍课程介绍1 1、课程学习的目标和意义、课程学习的目标和意义2 2、课程学习方法、课程学习方法3 3、参考资源、参考资源云端数据和服务AndroidIOS两种开发架构两种开发架构AndroidIOS系统架构基于Java虚拟机基于UNIX系统安全性安全性略低安全、稳定开发语言JavaObjective C, Swift是否开源开源不开源设备的种类各类手机和嵌入式设备iPhone/iPad等用户人群大量用户群体消费能力较高用户支撑企业GoogleApple应用商店各类安卓市场AppStore (08年上线)移动终
2、端时代的典型产品线移动终端时代的典型产品线IOS终端Android终端WeChat入口Web终端SwiftJavaHTML + Javascript远程数据和服务:PHP、JavaEE、Python等数据存储:MySQL、Storage等合一的探索:合一的探索:Titanium SDKTitanium SDK发展:基于发展:基于javascriptjavascript的统一平的统一平台台8/48实践目标:云服务支持的移动应用实践目标:云服务支持的移动应用 开源的移动app开发 彼此开源、相互学习 互助测试 & 迭代 云端基础数据服务 将用户数据的所有权归还给用户 建立人人共享的开源数据服务 技
3、术研究论文 前端、服务器端均可 在自己的项目中实现了,或是能够实现 个人演示 & 讲解9/48课程学习方法课程学习方法 注重 & 研究交互设计 面向用户的敲门砖,仔细测试用户体验 整体性思维 从数据表的设计,到服务器端接口,到客户端交互 有计划的实践 踏出第一步,你会发现惊喜 互相开源,互相分享技能,互相测试 保持良好学习心态 循序渐进,不放过细节 为了实现内心中一份爱的事业10/48参考资源参考资源 网上获取知识 http:/ http:/ http:/ http:/ http:/ http:/ 参考书籍 Android开发艺术探索 Modern PHP javascript高级程序设计 J
4、ava RESTful Web Service实战第一章第一章 Android Android基础入门基础入门Android体系结构Android开发环境搭建开发第一个Android程序 学习目标学习目标 通信技术 Android体系结构3重点了解掌握2 Android程序结构 Android程序打包过程Android开发环境搭建 HelloWorld程序的编写1 目录目录Android简介1.11.1点击查看本小节知识架构Android开发环境搭建 1.21.2点击查看本小节知识架构开发第一个Android程序1.31.3点击查看本小节知识架构本章小结1.41.4 知识架构知识架构1.1 A
5、ndroid简介返回目录1.1.1通信技术1.1.3Android体系结构1.1.2Android起源Dalvik虚拟机1.1.4 知识架构知识架构1.2 Android开发环境搭建返回目录1.2.1ADT Bundle开发工具集合1.2.3DDMS的使用1.2.2Android调试桥(ADB) 知识架构知识架构1.3 开发第一个Android程序返回目录1.3.1案例HelloWorld程序1.3.3Android程序打包过程Android程序结构1.3.21.1 Android1.1 Android简介简介什么是什么是Android? Android本意指“机器人机器人”,Google公司
6、将Android的标识设计为一个绿色机器人绿色机器人, 表示Android系统符合环保环保概念,是一个轻薄轻薄短小,功能强大功能强大的移动系统移动系统,是第一个真正为手机打造的开放开放性系统。1.1 Android1.1 Android简介简介1.1 Android1.1 Android简介简介 1.1.1 通信技术通信技术第一代通信技术(第一代通信技术(1G):是指最初的模拟、仅限语音的蜂窝电话标准。第二代通信技术(第二代通信技术(2G):是指第2代移动通信技术,代表为GSM,以数字语音传输技术为核心。第三代通信技术(第三代通信技术(3G):是指将无线通信与国际互联网等多媒体通信结合的新一代
7、移动通信系统。第四代通信技术(第四代通信技术(4G):又称IMT-Advanced技术,它包括了TD-LTE 和 FDD-LTE。1.1 Android1.1 Android简介简介 1.1.2 Android起源起源 Android一词最早出现于法国作家利尔亚当在1886年发表的科幻小说未来夏娃中,将外表像人像人的机器机器起名为Android。 Android操作系统最初是由安迪安迪罗宾罗宾(Andy Rubin)开发出的,2005年被Google收购,并于2007年11月5日正式向外界展示了这款系统。 2008年9月发布Android第第1个个版本Android1.1。Android系统一
8、经推出,版本升级非常快,几乎每隔半年就有一个新的版本发布。从Android1.5版本开始,Android用甜点甜点作为系统版本的代号。2009年4月30日,Android1.5 Cupcake(纸杯蛋糕)正式发布。2009年9月5日,Android1.6 Donut(甜甜圈)版本发布。1.1 Android1.1 Android简介简介 1.1.2 Android起源起源界面演进界面演进1.1 Android1.1 Android简介简介 1.1.3 Android体系结构体系结构1.1 Android1.1 Android简介简介 1.1.4 Dalvik虚拟机虚拟机 Dalvik是Goog
9、le公司自己设计用于Android平台的虚拟机虚拟机,它可以简单的完成进程隔离进程隔离和线程管理线程管理,并且可以提高内存的使用效率。 基于架构 基于栈架构 基于寄存器架构JVM (jdk javac) 文件格式 .java.class.jar .java.class.dex.odexDalvik VM (sdk dex)1.2 Android1.2 Android开发环境搭建开发环境搭建 1.2.1 ADT Bundle开发工具集合开发工具集合 到“http:/ Bundle。将ADT Bundle解压后,会看到eclipse目录目录、sdk目录和SDKManager.exe。1.2 And
10、roid1.2 Android开发环境搭开发环境搭建建 1.2.2 Android调试桥(调试桥(ADB) Android调试桥指的就是adb.exe工具(Android Debug Bridge简称ADB),存在于SDK的platform-tools目录中,允许开发人员与模拟器或者连接的Android设备进行通信。 ADB 常见命令 adb start-server:开启adb服务 adb device:列出所有设备 adb logcat:查看日志 adb kill-server:关闭adb服务 adb shell:挂载到Linux的空间 1.2 Android1.2 Android开发环境
11、搭建开发环境搭建 1.2.3 DDMS的使用的使用 DDMS全称Dalvik Debug Monitor Service,它是Android开发环境中Dalvik虚拟机调试监控服务虚拟机调试监控服务。DDMS作为IDE、emultor、真机之间的桥梁,将捕捉到终端的ID通过ADB建立调试桥,从而实现发送指令到测试终端的目的。小计算小计算 如果VGA分辨率指的是640*480,那么,HVGA (H表示half)表示什么分辨率? 320*240 ? 320*480 ? QVGA Q代表quarter,即1/4 240*320 WVGA 800*480 SVGA,WSVGA 800*600,1024
12、*6001.3 1.3 开发第一个开发第一个AndroidAndroid程序程序 1.3.1 案例案例HelloWorld程序程序 任何一门语言编写的第一个程序毫无疑问的都是HelloWorld,当然我们也不例外,本小节就教大家如何编写一个HelloWorld程序,以及了解Android项目的结构。1.3 1.3 开发第一个开发第一个AndroidAndroid程序程序 1.3.2 Android程序结构程序结构 Android程序创建时,eclipse就为其构建了基本结构,设计者可以在此结构上开发应用程序,因此,掌握Android程序的结构是很有必要的。1.3 1.3 开发第一个开发第一个A
13、ndroidAndroid程序程序 1.3.3 Android程序打包过程程序打包过程 Android程序开发完成后,如果要发布到互联网上供别人使用,就需要将自己的程序打包成正式的Android安装包文件(Android Package简称APK),其后缀名“.apk”。 使用run as也能生成一个apk安装包,但是使用run as生成的是测试的安装包,只供开发者自己测试使用。1.4 1.4 本章小结本章小结本章主要讲解了Android的基础知识,首先介绍了Android的起源以及体系结构,然后讲解Android开发环境的搭建,最后通过一个HelloWorld程序来讲解如何开发Android
14、程序。本章的知识作为Android开发者的入门知识,要求初学者对Android开发有个简单的了解,方便学习后面的知识。33/48再会!再会! 下一章:Android UI开发教师:教师: 金星金星办公室:逸夫楼办公室:逸夫楼C326C326电话:电话:18971142771 18971142771 QQQQ:6514926465149264 学习目标学习目标3 国际化重点了解掌握2样式和主题布局的类型 程序调试1 在Android应用中,UI(User Interface)界面是人与手机之间数据传递、交互信息的重要媒介和对话接口接口。 Android程序开发最重要的一个环节就是界面处理,界面的
15、美观度直接影响用户的第一印象,因此,开发一个整齐、美观的界面是至关重要的。2.1 UI2.1 UI概述概述2.1 UI2.1 UI概述概述 Android应用的界面是由View和ViewGroup对象构建而成的。View类是Android系统平台上用户界面表示的基本单元,View的一些子类被统称为Widgets(工具),它们提供了诸如文本输入框和按钮之类的UI对象的完整实现。 ViewGroup是View的一个扩展,它可以容纳多个View,通过ViewGroup类可以创建有联系的子View组成的复合控件。2.2 2.2 布局文件的创建布局文件的创建 在Android应用程序中,界面界面是通过布
16、局文件布局文件设定的。 布局文件采用XML格式,每个应用程序默认包含一个主界面布局文件,该文件位于项目的“res/layout”目录中。 Android中中有几种布局?有几种布局?2.3 2.3 布局的类型布局的类型 Android中的布局如下:LinearLayoutRelativeLayoutTableLayoutGridLayoutFrameLayoutAbsoluteLayout2.3 2.3 布局的类型布局的类型控件盒子模型控件盒子模型一般控件属性一般控件属性 margin android:layout_marginTop android:layout_marginBottom an
17、droid:layout_marginLeft android:layout_marginRight 如果四面是相同的 android:layout_margin padding android:paddingTop android:paddingBottom android:paddingLeft android:paddingRight android:background #aa0000 drawable/some 如果四面是相同的 android:padding增强编程环境的自动提示功能增强编程环境的自动提示功能 XML 粘贴到里面:=:.abcdefghijklmnopqrstuvw
18、xyz(, Alt+/:自动补全快捷键 java 粘贴到里面:.abcdefghijklmnopqrstuvwxyz(, Ctrl+1:快速修复AndroidAndroid有没有有没有Border ?Border ? 没有提供。 使用background android:background 只要是drawable均可 drawable包括图片和长方形等矢量图案。 单位单位 px: 1个像素,不建议使用这个单位 PPI (DPI): Pixels (Dots) per inch,屏幕上每英寸有多少个像素。 dp: Density-independent pixels,dp*ppi/160 =
19、px sp: Scale-independent pixels,安卓的字体单位不同屏幕分辨率不同屏幕分辨率 ldpi 低分辨率 120dpi 1dp=0.75px mdpi 标准分辨率 160dpi 1dp=1px hdpi 高分辨率 240dpi 1dp=1.5px xhdpi 超高分辨率 320dpi 1dp=2px真实手机的真实手机的DPIDPI计算计算屏幕分辨率屏幕分辨率测试测试shapeshape ImageView、ImageButton等控件 android:src 设置View的drawable(如图片,也可以是颜色,但是需要指定View的大小) TextView等控件 and
20、roid:background Shape的子节点 gradient - 对应颜色渐变。 solid - 填充。 stroke - 描边。 corners - 圆角。 padding - 定义内容离边界的距离。圆角按钮背景圆角按钮背景shapeshape代码节选代码节选 其他控件属性其他控件属性 android:gravity top, bottom, left, right, center, center_vertical, center_horizontal android:ignoreGravity android:layout_gravity 区别 前两者是对内容的限定 后者是相对父元
21、素限定 android:scaleType 设置图片适配控件尺寸的不同方式。 2.3.1 相对布局(相对布局(RelativeLayout)。 在Eclipse中开发Android程序时,默认默认采用的就是相对相对布局布局。 相对布局通常有两种形式,一种是相对于容器相对于容器而言的,一种是相相对于控件对于控件而言的。2.3 2.3 布局的类型布局的类型第一类第一类: :属性值为属性值为truetrue或或false false android:layout_centerHorizontal 水平居中 android:layout_centerVertical 垂直居中 android:layo
22、ut_centerInparent 相对于父元素完全居中 android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物 android:layout_alignParentBottom 贴紧父元素的下边缘 android:layout_alignParentLeft 贴紧父元素的左边缘 android:layout_alignParentRight 贴紧父元素的右边缘 android:layout_alignParentTop 贴紧父元素的上边缘 第二类:属性值必须为第二类:属性值必须为idid的引用名的引用名“id/id-na
23、meid/id-name” android:layout_below 在某元素的下方 android:layout_above 在某元素的上方 android:layout_toLeftOf 在某元素的左边 android:layout_toRightOf 在某元素的右边 android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐 android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐 android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐 android:layout_alignRight 本元素的
24、右边缘和某元素的的右边缘对齐2.3 2.3 布局的类型布局的类型 2.3.2 线性布局(线性布局(LinearLayout) 线性布局是Android中较为常用的布局方式,它使用标签表示。 线性布局有两种方式指定控件位置,一种是水平方向水平方向,一种是竖直竖直方向方向。 属性属性 android:orientation 布局的方向 layout_weight 相对大小 取值:一个非负整数值 线性布局会根据该控件layout_weight值与其所处布局中所有控件layout_weight值之和的比值为该控件分配占用的区域。 注意: 如果layout_weight指为0,控件会按原大小显示,不会被
25、拉伸。2.3 2.3 布局的类型布局的类型 2.3.3 表格布局(表格布局(TableLayout) 表格布局就是让控件以表格以表格的形式来排列组件的,只要将组件或信息放在单元格中,控件就可以整齐整齐的排列排列。 在TableLayout中,行行数由TableRow对象控制的,即布局中有多少TableRow对象,就有多少行。2.3 2.3 布局的类型布局的类型 2.3.4 网格布局(网格布局(GridLayout) 网格布局是Android4.0新增的布局,它实现了控件的交错显示交错显示,能够避免因布局嵌套对设备性能的影响,更利于自由布局的开发。 网格布局用一组无限细无限细的直线直线将绘图区域
26、分成行行、列列和单元单元,并指定控件的显示区域和控件在该区域的显示方式。2.3 2.3 布局的类型布局的类型 脚下留心:脚下留心: 由于GridLayout是Android4.0之后有的新功能,如果要在项目中使用这种布局,需要把SDK的最低版本指定为Android4.0(API14)以上。 AndroidManifest.xml中,配置SDK兼容的最低版本和最高版本示例代码如下: 2.3 2.3 布局的类型布局的类型 2.3.5 帧帧布局布局 (FrameLayout) 帧布局为每个加入其中的控件创建一个空白区域空白区域(称为一帧,每个控件占据一帧)。 采用帧布局设计界面时,只能在屏幕左上角显
27、示左上角显示一个控件,如果添加多个控件,这些控件会按照顺序在屏幕的左上角重叠显示重叠显示,且会透明透明显示之前控件的文本文本。 2.3 2.3 布局的类型布局的类型 2.3.6 绝对布局绝对布局 AbsoluteLayout 绝对布局需要通过指定x、y坐标坐标来控制每一个控件的位置,放入该布局的组件需要通过android:layout_x和android:layout_y两个属性指定其准确的坐标值,并显示在屏幕上。2.3 2.3 布局的类型布局的类型 2.3.6 绝对绝对布局布局 (AbsoluteLayout)绝对布局多用于游戏开发中,由于多分辨率兼容麻烦,绝对布局在Android1.5后被
28、Google弃用,因此应用开发一般情况下不推荐使用绝对布局。2.3 2.3 布局的类型布局的类型 2.3.7 案例案例用户注册用户注册 接下来通过一个用户注册的案例演示相对布局和线性布局的使用。2.4 2.4 样式和主题样式和主题 2.4.1 样式和主题的使用样式和主题的使用 Android系统中,包含了很多定义好的样式和主题,这些样式和主题用于定义定义布局显示在界面上的风格风格。 下图就是一幅设置了窗口化主题的应用。2.4 2.4 样式和主题样式和主题 2.4.2 案例案例自定义样式和主题自定义样式和主题 尽管Android系统提供了很多样式和主题,但有时这些效果并不能满足实际需求,此时还可
29、以自定义自定义样式样式或者主题主题。 自定义样式和主题的步骤如下: 1)在res/values 目录创建样式文件style.xml,添加 根节点。 2)在节点中添加一个节点,并在该节点中为样式或 主题定义一个名称。 3)在节点中声明一个或多个,每个节点需要定义一 个属性名,并在元素内部设置这个属性的值。 2.4 2.4 样式和主题样式和主题 2.4.2 案例案例自定义样式和主题自定义样式和主题 接下来通过一个具体的案例来演示如何自定义样式和主题。2.5 2.5 国际化国际化 2.5 国际化国际化 国际化国际化是指软件开发时,应该具备支持多种语言和地区的功能,为不同国家和地区的用户,提供符合来访
30、者阅读习惯的页面或数据。 由于国际化Internationalization这个单词的首字母“I”和尾字母“N”之间有18个字符,因此国际化被简称为I18N。 为了提供不同语言版本,开发者只需要在res目录下新建对应的values文件夹。2.5 2.5 国际化国际化 2.5 国际化国际化 接下来通过一个案例I18N来展示图片、文字的国际化。I18N实现了在系统设置页面切换不同国家语言,在程序界面展示不同国家的国花以及文字。2.6 2.6 程序调试程序调试 2.6.1 Junit单元测试单元测试 JUnit是一个测试框架,它是Android SDK1.5加入的自动化测试自动化测试功能。在完成某个
31、功能后对该功能进行单独测试,而不需要把程序安装到手机或模拟器中进行测试,这样会大大提高程序开发的准确性。 JUnit单元测试既可以嵌入到项目中,也可以作为一个单独的项目,针对某个项目进行测试。具体步骤如下: 1)配置JUnit环境 2)创建测试类 3)运行测试2.6 2.6 程序调试程序调试 2.6.2 LogCat使用使用 LogCat用于输出Android程序中的日志信息。它支持五种输出方式,级别由低到高分别是:Verbose(V): 显示全部信息,黑色Debug(D): 显示调试信息,蓝色Info(I): 显示一般信息,绿色Warming(W):显示警告信息,橙色Error(E): 显示
32、错误信息,红色2.6 2.6 程序调试程序调试 2.6.2 LogCat使用使用 由于LogCat中输出的信息多而繁杂,找到所需要的Log信息会比较困难,因此可以使用过滤器,过滤掉不需要的信息,点击加号 ,弹出LogCat信息过滤框。2.6 2.6 程序调试程序调试 2.6.3 Toast的使用的使用 Toast会显示一个小消息告诉用户一些必要信息,该消息在短时间内自动消失,不会干扰用户操作。 Toast组件有两个方法makeText()和show(),其中makeText()方法用于设置需要显示的字符串,show()方法显示消息框。Toast toast = Toast.makeText(C
33、ontext,Text,Time);toast.show();简写形式如下:Toast.makeText(context,这是弹出这是弹出消息!消息!,0).show();2.6 2.6 程序调试程序调试 2.6.3 Toast的使用的使用 接下来在程序中创建一个Toast显示“这是弹出消息!”,示例代码如下: Toast.makeText(MainActivity.this,这是弹出消息这是弹出消息!,Toast.LENGTH_SHORT).show();2.7 2.7 本章小结本章小结本章主要讲解了Android中的布局、样式和主题、国际化、程序调试等知识。本章所讲解的内容在实际开发中非常
34、重要,基本上每个Android程序都会使用到这些内容,因此要求初学者必须熟练掌握,为后面的学习做好铺垫75/48再会!再会! 下一章:Activity第三章 ActivityActivity生命周期Activity的启动模式显式意图和隐式意图Activity中的数据传递 学习目标3Activity简介重点了解掌握2 Android中的任务栈Activity的四种启动模式Activity的生命周期 Activity中的数据传递显式意图和隐式意图1 目录Activity入门3.13.1点击查看本小节知识架构Activity的启动模式 3.23.2点击查看本小节知识架构在Activity中使用Int
35、ent3.33.3点击查看本小节知识架构Activity中的数据传递3.43.4点击查看本小节知识架构本章小节3.53.5 知识架构3.1 Activity入门返回目录3.1.1Activity简介3.1.3Activity的生命周期Activity的创建3.1.2案例Activity的存活3.1.4 知识架构3.2 Activity的启动模式返回目录3.2.1Android下的任务栈3.2.2Activity的四种启动模式 知识架构3.3 在Activity中使用Intent返回目录3.3.1Intent介绍3.3.3案例打开系统照相机3.3.2显式意图和隐式意图 知识架构3.4 Activ
36、ity中的数据传递返回目录3.4.1数据传递方式3.4.3回传数据3.4.2案例用户注册案例装备选择3.4.43.1 Activity入门什么是什么是Activity? 3.1.1 Activity简介简介 3.1 Activity入门 3.1.1 Activity简介简介 Activity是Android应用程序的四大组件之一四大组件之一,它负责管理Android应用程序的用户界面用户界面。一个应用程序一般会包含若干个Activity,每一个Activity组件负责一个用户界面的展现。Activity展示界面Activity展示界面3.1 Activity入门 3.1.1 Activity简
37、介简介 Activity是通过调用setContentView()方法来显示指定组件的。该方法既可以接收View对象为参数,也可以接收布局文件对应的资源id为参数。 Activity就像一个界面管理员,用户在界面上的操作是通过Activity来管理的,下面列举几个Activity的常用事件。 onKeyDown(int keyCode,KeyEvent event):对应按键按下事件 onKeyUp(int keyCode,KeyEvent event):对应按键松开事件 onTouchEvent(MotionEvent event):对应点击屏幕事件3.1 Activity入门 3.1.2
38、Activity的创建的创建 在Android应用中,可以创建一个或多个Activity,创建步骤如下所示:1)定义一个类继承自android.app.Activity或者其子类子类;2)在res/layout目录中创建一个xml文件,用于创建Activity的布局的布局;3)在AndroidManifest.xml文件中注册注册Activity;4)重写重写Activity的onCreate()方法,并在该方法中使用setContentView() 加载指定的布局文件;3.1 Activity入门 3.1.3 Activity的生命周期的生命周期 生命周期就是一个对象从创建到销毁的过程,每一
39、个对象都有自己的生命周期。同样,Activity也具有相应的生命周期,Activity的生命周期中分为三种状态。 运行状态运行状态:当Activity在屏幕的最前端时,它是可见的、有焦点的。暂停状态暂停状态:Activity对用户来说仍然是可见的,但它不再拥有焦点。停止状态停止状态:当Activity完全不可见时,它就处于停止状态,但仍然保留着当前状态和成员信息。然而这些对用户来说都是不可见的。 Activity从一种状态转变到另一种状态时会触发一些事件,执行一些回调方法来通知状态的变化,下面通过图例来展示。3.1 Activity入门 3.1.3 Activity的生命周期的生命周期创建时执
40、行可见时执行回到前台,再次可见时执行获取焦点时执行失去焦点时执行用户不可见,进入后台时执行销毁时执行3.1 Activity入门 3.1.4 案例案例Activity的存活的存活 为了让初学者掌握Activity的生命周期,接下来通过Activity存活的案例来演示两个Activity跳转时,生命周期方法变化的过程。3.1 Activity入门 脚下留心脚下留心:横竖屏切换时的生命周期:横竖屏切换时的生命周期当手机横竖屏切换时,横竖屏切换时,Activity会销毁重建会销毁重建(模拟器中横竖屏切换可以使用ctrl+F11)。如果不希望在横竖屏切换时Activity被销毁重建,可以在Androi
41、dManifest.xml文件中设置Activity的android:configChanges的属性,具体代码如下所示:android:configChanges=orientation|keyboardHidden|screenSize“如果希望某一个界面一直处于竖屏或者横屏状态,可以在清单文件中通过设置Activity的属性来完成,具体代码如下所示:竖屏:android: screenOrientation=portrait横屏:android: screenOrientation=landscape参考资料:http:/ Activity入门 多学一招:多学一招:设置设置ViewVie
42、w的点击事件监听的点击事件监听Android程序中,设置View的点击事件点击事件监听共有四种四种,分别是:1)在布局文件中为控件设置onClick属性属性指定点击方法;2)创建一个内部类内部类实现OnClickListener接口接口并重写onClick()方法, 之后需要为控件设置setOnClickListener(Listener listener);3)主类主类中实现OnclickListener接口,然后重写onClick()方法;4)创建匿名内部类匿名内部类,即在为控件设置监听时直接创建一个 OnClickListener实例,不为该实例指定名称。3.2 Activity的启动模
43、式 3.2.1 Android下的任务栈下的任务栈 Android系统中的任务栈,类似于一个容器,用于管理所有的Activity实例。在存放Activity时,满足“先进后出(先进后出(First-In/Last-Out)”的原则。从图可以看出,先加入任务栈中的Activity会处于容器下面,后加入的处于容器上面,而从任务栈中取出Activity是从最顶端先取出,最后取出的是最底端的Activity。3.2 Activity的启动模式 3.2.2 Activity的四种启动模式的四种启动模式 Activity的启动模式启动模式有四种四种,分别是standard、singleTop、single
44、Task和singleInstance。 在AndroidManifest.xml中,可以通过标签的android:launchMode属性属性设置启动模式。3.2 Activity的启动模式 3.2.2 Activity的四种启动模式的四种启动模式 standard标准模式标准模式standard是Activity默认的启动模式,在不指定Activity启动模式的情况下,所有Activity使用的都是standard模式。在standard模式下,每当启动一个新的Activity,它就会进入任务栈,并处于栈顶的位置,对于使用standard模式的Activity,每次启动都会创建一个新的实例
45、。3.2 Activity的启动模式 3.2.2 Activity的四种启动模式的四种启动模式 singleTop模式模式singleTop启动模式与standard类似,不同的是,当启动的Activity已经位于栈顶时,则直接使用它,不再创建新的实例。3.2 Activity的启动模式 3.2.2 Activity的四种启动模式的四种启动模式 singleTask模式模式当Activity的启动模式为singleTask时,每次启动该Activity时,系统首先会检查栈中是否存在该Activity的实例,如果发现已经存在则直接使用该实例,并将当前Activity之上的所有Activity出栈
46、,如果没有发现则创建一个新的实例。3.2 Activity的启动模式 3.2.2 Activity的四种启动模式的四种启动模式 singleInstance模式模式 singleInstance模式加载Activity时,只会创建一个Activity实例,并且会使用一个全新的任务栈来装载该Activity实例。http:/ 在Activity中使用Intent 3.3.1 Intent介绍介绍 Intent中文翻译为“意图意图”,它是Android程序中各个组件进行交互的一种重要方式,它不仅可以指定当前组件要执行的动作动作,还可以在不同组件之间进行数据传递数据传递。 Intent一般用于启动A
47、ctivity、启动服务、发送广播等,承担了Android应用程序三大核心组件相互间的通信功能。 Intent启动Activity的方法有: startActivity(Intent intent) startActivityForResult(Intent intent,int code) 3.3 在Activity中使用Intent 3.3.2 显式意图和隐式意图显式意图和隐式意图 显式意图显式意图即在通过Intent启动Activity时,需明确指定激活组件的名称。如果需要在本应用本应用中启动其他其他的Activity时,可以使用显式意图来启动Activity。Intent intent
48、 = new Intent(this, Activity02.class); startActivity(intent); 显式意图还可以根据目标组件的包名、全路径名来指定开启组intent.setClassName(cn.itcast.xxx,cn.itcast.xxx.xxxx); startActivity(intent);3.3 在Activity中使用Intent 3.3.2 显式意图和隐式意图显式意图和隐式意图 隐隐式意图式意图没有明确指定组件名的Intent称为隐式意图。系统会根据隐式意图中设置的动作(action)、类别(category)、数据(Uri和数据类型)找到最合适的
49、组件。 标签指明了当前Activity可以响应的动作为cn.itscast.xxx,而标签则包含了一些类别信息,只有当和中的内容同时匹配时,Activity才会被开启。3.3 在Activity中使用Intent 3.3.2 显式意图和隐式意图显式意图和隐式意图 隐式意图隐式意图使用隐式意图开启Activity的示例代码如下所示:Intent intent = new Intent();/ 设置动作和清单文件一样intent.setAction(cn.itscast.xxx);startActivity(intent); 3.3 在Activity中使用Intent 3.3.3 案例案例打开系
50、统照相机打开系统照相机 在实际开发中,避免不了要调用其他应用程序的组件。例如,在开发新浪微博时,需要启动系统的相机功能。 接下来通过打开系统照相机的案例向大家演示如何使用隐式意图。3.4 Activity中的数据传递 3.4.1 数据传递方式数据传递方式 Intent不仅可以用来开启Activity,也可以在Activity之间传递数据。在数据传递时,可以使用putExtra()方法将数据存储在Intent中。 String data = Hello Activity02Intent intent = new Intent(this,Activity02.class);intent.putEx