基于Android平台的录音与实时传播.doc_第1页
基于Android平台的录音与实时传播.doc_第2页
基于Android平台的录音与实时传播.doc_第3页
基于Android平台的录音与实时传播.doc_第4页
基于Android平台的录音与实时传播.doc_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

沈阳师范大学学士学位论文本科毕业论文(设计)( 2013届本科毕业生)题目: 基于Android平台的录音与实时传播的设计与实现 学生姓名: 周凡 学生学号: 09999035 学院名称: 科信软件学院 专业名称: 计算机科学与技术 指导教师: 关庆余 二零一三年四月【摘 要】 Android是目前全世界最大的移动操作系统,基于这种操作系统的智能手机的全球使用量已经接近10亿部。本文针对基于Android平台的录音与实时传播的实现进行毕业设计,研究分析了Android平台的系统架构和组件模型,接着解析了Android中的重要API和应用构成,以及Intent和生命周期的机制。在此基础上,设计和开发录音与实时传播软件。本系统界面友好、操作便捷,具有可扩展性和可维护性;经过测试,能够满足用户的基本需求。【关键词】 Android, Java, 实时传播, 文件存储, 网络传输The recording and real time communication software based on Android platform【Abstract】Android is now the worlds largest mobile opreating system,based on the global use of smartphone operating system is close to 1billion units.In this paper,based on the android platform of the tape to graduation design and implementation of real-time transmission.Study of the android platform system architecture and component models are analyzed,and then analyzes the important of the android API and application form as well as the mechanism of Intent and life cycle.On the basis of the design and development of the recording and real time communication software.The software interface is friendly, the operation is convenient,has the scalability and maintainability, after testing, can satisfy the basic requirements of the user.【Keywords】Android, Java, Real-time transmission, File storage, Network transmission 目录第一章 绪论.1 1.1引言.1 1.2国内外手机应用研究现状.1 1.3发展趋势.2第二章 Android的相关技术介绍及分析.3 2.1 Android平台的技术架构.3 2.2 Android架构分析.3 2.3 Android应用的构成.6第三章 Android应用程序结构剖析.7 3.1 Android的API.7 3.2 Android应用程序结构解析.8 3.3 Android活动的生命周期.9 3.4 Intent的详细解析.14 3.5 Android系统服务.16 3.6 Android事件处理机制.16第四章 Android录音与实时传播的设计与实现.16 4.1研究目标.16 4.2 需求分析.16 4.3 界面设计.16 4.4 设计思路与理论.17 4.5 主要代码.21 后 记.28参考文献.29附录一.30II第一章 绪论1.1 引言 面对巨大的移动应用开发市场,国内外的IT厂商分别推出各种各样的移动应用平台,Google发布的基于Linux平台的开源手机操作系统Android的诞生,标志着移动信息设备平台进入了一个崭新的领域。这种操作系统的智能手机的全球使用量已经接近了10亿部,而且其增长前景仍然是不可挡。 Android平台由操作系统,中间层,用户界面和应用软件构成,在应用程序的开发使用Java语言,并提供专门的SDK。 本课题的目的在于掌握Java手机应用开发技术和移动软件平台开发技术,以Java语言为基础,利用Android提供的SDK完成在Android平台上运行的具有一定功能的录音与实时传播软件。1.2国内外手机应用研究现状 自Android问世以来,在多个方面体现出了它的先天性优势。例如开放性,丰富的硬件以及方便开发等。 在优势方面,Android平台首先就是其开放性,开放的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。开放性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。 其次是丰富的硬件,这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容。 方便开发,Android平台提供给第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻扰,可想而知,会有很多新颖别致的软件会诞生。系统的开放性和免费性,移动互联网的快速发展和相关厂商的大力支持等,这些优势促使Android的使用量大增,应用软件的数量也水涨船高,截至2012年12月,Android应用早已突破70万大关,门类也不断的增多,丰富的应用使Android几乎无所不能。 近年来十分热门的网络社交服务也已进入到手机客户端领域,如QQ,新浪微博等。各大知名社交网站分别推出他们的客户端,由于Android包含一个强大的程序库,支持多种常用的音频格式文件的回放和录制并能通过网络协议实现传播,这些技术使Android平台的录音与实时传播成为现实。1.3发展趋势 Android系统无疑已经成为时下全世界最热门的移动设备操作系统,但这并没有让它停下发展的脚步,自2007年11月发布以来,Android家族已经增加了10多位成员,进一步改善了功能和运行环境,同时也为平板电脑的快速发展奠定了基础,具有其他操作系统无法比拟的优势和发展空间。 随着3G应用的不断开发推广,用户会需要更加个性化、优质化的多媒体数据服务,这些促使Android系统在技术上进一步完善,在若干方面进行新的发展。 首先,提供信息服务,这些信息既包括传统意义上的新闻,天气,又包括现实生活中的产品信息,路况信息等,这些信息将给用户全方位的参考。 其次,提供强大的用户体验,Android系统对于硬件的要求使手机厂商不得不开发性能更高的手机,在处理器,屏幕分辨率等方面大幅提升,这也能反作用于手机应用开发,使开发者的设计理想不因硬件受限,顺应了移动互联网的大潮流,有助于Android的推广及应用。 接着,提供互动功能,利用Android手机,人们可以表达自己的心声,不仅仅是图片,还包括音视频等,随时随地与他人分享身边事,让心灵的距离更近。 最后,Android会更加的安全,随着智能手机的普及化和智能化,手机软件的更新、升级将会变得越发简单,并会为用户安全信息提醒,让用户有能力和权力决策那些内容是否浏览、下载或分享,能够十分有效的帮助用户对获取到的内容进行管理,保护用户的个人隐私和基于手机的在线购物,账户信息等。 随着Android的不断创新,开发,维护,这些发展理想陆续变成现实。更强大更安全的Android将展现给世人。第二章 Android的相关技术介绍及分析2.1 Android平台的技术架构 Android平台采用了软件叠层的架构,由低到高分为四部分:Linux内核层,中间层,应用程序框架,应用层,如图2-1所示。 图2-1 Android平台架构 Linux内核层:该层是基础,包含各种驱动,并提供操作系统的基本功能; 中间层:包含程序库和Android运行时环境; 应用程序框架:该层是编写核心应用所使用的API框架,开发者可以使用这些框架来开发自己的应用,但必须遵守该框架的开发原则; 应用层:该层是各种应用软件,包括通话、短信、日历、地图、浏览器等核心应用程序,这些应用程序都是使用Java编写的。2.2 Android架构分析 Android核心为嵌入式Linux2.6作业系统,向上搭配Google为Android开发的类库及Android运行时。在开发应用程序时,应用程序架构内已经具备多种不同的基础组件,就可以直接调用这些组件来使用,可以节省开发应用程序的心力及时间。2.2.1 Linux内核 Android使用Linux2.6作为操作系统,Android的Linux核心为标准的Linux内核,Linux内核也同时作为硬件和协议栈之间的抽象层。Android对操作系统的使用包括核心和驱动两部分,驱动包括一些与移动设备相关的驱动程序,如显示驱动,Flash内存驱动,相机驱动,音频驱动,视频驱动,WiFi驱动,键盘驱动,蓝牙驱动,电源管理等。2.2.2 应用程序框架 开发者可以访问Android应用程序框架中的API,该应用程序架构简化了组件的重用,任何一个应用程序都可以发布它的功能块,并且任何其他的应用程序都可以使用这些发布的功能块。同样,该应用程序的重用体制也使用户可以方便的替换程序组件。Android提供一系列的服务和管理器,其中包括以下内容。 (l)一套强大和可扩展的视图系统:用来建构一个应用程序的基本组件,包括列表、网格、文本框、按钮、web浏览器等,这些视图可以用来构建应用程序。 (2)内容提供器:使得应用程序可以访问另一个应用程序的数据,或者可以共享他们自己的数据; (3)资源管理器:提供非代码资源的访问,例如本地字符串、图形和布局文件等; (4)通知管理器:使得应用程序可以在状态栏中显示自定义的提示信息; (5)活动管理器:用来管理应用程序的生命周期,并且提供常用的导航回退功能。例如:启动应用程序要用到的资源准备及关闭应用程序时释放内存及相关资源等工作。 (6)视窗管理器:用来管理所有启动程序的视窗。 (7)位置管理器:用来管理地图服务的相关功能。 (8)电话管理器:用来管理用户拨打与接听电话的相关功能。 (9)包管理器:管理所有安装在Android系统内的包。2.2.3 程序库 Android包含一个能被Android系统中各种不同组件所使用的CC+库,该库通过Android应用程序框架为开发者提供服务,主要包括以下内容。 (1)系统C库:一个从BSD继承的标准C系统函数库,是专门基于嵌入式Linux设备定制的; (2)媒体库:该库支持多种常用的音频、视频格式文件的回放和录制,同时支持静态图像文件,编码格式包括MPEG4、H.264、MP3、AAC、AMR、JPG和PNG等; (3)Surface Manager:管理显示子系统,并且为多个应用程序提供2D和3D图层的无缝融合; (4)SGL:底层的2D图形引擎; (5)3D库:该库可以使用3D硬件加速或者使用高度优化的3D软加速; (6)FreeType:用于位图和矢量字体显示; (7)WebKit:Android内建的浏览器,是以WebKit的浏览引擎为基础所开发成的。WedKit是一个开源浏览器网页排版引擎,配合Android手机的功能,可以在浏览网页时,达到更好的效果,例如:局部性的缩放网页上的资讯、触控式的操作等效果。 (8)SQLite库:SQLite是一个用于本地存储的、轻型关系型数据库引擎。SQLite提供结构化的数据存取。目前已经在很多嵌入式产品中使用了它,它占用的资源非常低。它无需安装和管理配置,同时它还支持事务功能和并发处理等等。SQLite也是一套开放性的关联式资料库,其特点在于轻量性方面的设计结构,更适合在手机上使用。 (9)SSL:中文名为“安全套接层协议层”,它是网景公司提出的基于WEB应用的安全协议。SSL协议指定了一种在应用程序协议(如HTTP、Telenet、NMTP和FTP等)和TCP/IP协议之间提供数据安全性分层的机制,它为TCP/IP连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。SSL协议位于TCP胆协议与各种应用层协议之间,为数据通讯提供安全支持。 SSL协议可分为两层:SSL记录协议:它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议:它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。SSL协议提供的服务主要有:(1)认证用户和服务器,确保数据发送到正确的客户机和服务器;(2)加密数据以防止数据中途被窃取;(3)维护数据的完整性,确保数据在传输过程中不被改变。2.2.4 Android运行时组件 Android运行时环境由一个核心库和Dalvik虚拟机组成。核心库提供Java编程语言核心库的大多数功能。虽然Android是用Java语言来开发、撰写应用程序,但不使用Java运行时组件来执行Java程序,而是使用了由Google自行研发的Dalvik虚拟机来执行程序。它在保证API方面的兼容的同时,针对移动手机进行了大幅优化,占用资源更小,运行效率更高。每一个Android应用程序都在自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成在一个设备中可以同时有效地运行多个虚拟系统,它依赖于Linux内核的一些功能,如线程机制和底层内存管理机制等。所有的类有Java编译器编译,最后由Dalvik虚拟机执行。2.3 Android应用的构成 Android的应用程序主要是用户界面方面的,通常用Java编写,其中还可以包含各种资源文件,Java程序及相关资源经过编译后,将生成一个APK包。Android应用的具体构成如图2-2所示。IntentContentProvider 通过Intent实现活动之间转换 通过contentProvider实现数据存储Activity存储设备Activity通过IntentReceiver对外部事件作出相应BinderIntent Receiver 通过Binder对事件进行绑定Service外部事件 图2-2 Android的构成和工作流程 一个Android应用程序通常由4个组件构成:活动、意图、服务和内容提供器。这4个组件是构成Android应用程序的基础,但除了Activity是必要部分之外,其余组件都是可选的,在某些应用程序中可能只需要其中部分组件即可。在应用程序中使用时,需要在配置文件AndroidManifest.xml中进行配置。这个配置文件是每个Android应用程序所必需的,用于定义应用程序的组件、组件的功能以及必要条件等。第三章 Android应用程序结构剖析3.1 Android的API Android API主要包含了以下几个部分:3.1.1 AndroidManifest.xml Android系统开放了许多底层应用供用户调用,与其他系统不同,Android系统有自己特殊的调用底层的方式。因此,需要通过某种方式设置Activity许可才能运行相应的应用。AndroidManifest.xml是系统的控制文件,它告诉系统如何处理所创建的所有应用组件。在AndroidManifest.xml中可以配置应用程序的权限,这种方式提供了程序使用系统应用的安全性保证,底层应用只有用相应的权限许可才能被用户程序使用,否则程序运行出现错误。 Android系统提供了许多许可,用户使用相应的底层服务时,需要在AndroidManifest.xml中添加相应的权限。如允许程序打电话,允许程序获取网络状态信息等。3.1.2 活动 活动是最基本的Android应用程序组建。在应用程序中,一个活动通常就是一个单独的屏幕。每个活动都通过继承活动基类而被实现为一个独立的活动类,活动类将会显示由视图控件组成的用户接口,并对事件作出相应。 大多数的应用程序都是由多个屏幕显示组成的,这里的每个屏幕都是一个活动,很容易实现从一个屏幕到另一个屏幕并且完成新的活动。Android会把每个从主菜单打开的程序保留在堆栈中,用户可以通过回退操作退回到之前打开过的屏幕,也可以选择性地移去一些没有必要保留的屏幕。3.1.3 视图 视图可以将其自身绘制到屏幕上。Android的用户界面由一系列的视图树构成。接口都是由一组以树的形式出现的视图组成的。开发者可以通过创建一个新的视图的方法来使用自定义的图形处理技术。3.1.4 Intent Intent用来描述应用程序的功能。它是利用消息实现应用程序间的交互机制,能够在程序运行的过程中连接两个不同的组件。Intent描述了应用中一次操作的动作、数据以及附加数据,向Android表达某种请求或者意愿,Android系统会根据Intent描述的内容选择适当的组件来响应,并将Intent传递给该组件,完成组件的调用。 与Intent相关的两个类是IntentFilter和IntentReceiver。当Intent请求做某个动作时,IntentFilter用于描述一个活动或者广播接收器能够操作哪些Intent,而IntentReceiver可使应用程序对外部事件做出相应。 Intent中两个最重要的部分是动作和动作对应的数据。典型的动作类型有活动的查看、选取、编辑等,而动作对应的数据则以URI形式表示。3.1.5 服务 服务是Android应用程序中具有较长的生命周期但是没有用户界面的程序。它在后台运行,并且可以与其他程序进行交互。服务与活动的级别差不多,但是不能独立运行,需要通过某一个活动来调用。 Android应用程序生命周期是由Android系统来决定的,不由具体的应用程序线程来控制。如果应用程序要求在没有界面显示的情况还能正常运行,此时就需要用到Service。3.1.6 通知 通知将以小图标的形式呈现在状态栏里,用户通过与图标的交互来接收消息。最常见的通知包括短信息、通话记录和语音邮件,但是应用程序也可以创建它们自己的通知事件。3.1.7 内容提供者 Android应用程序可以使用文件或者SQLite数据库来存储数据。内容提供者提供了一个多应用间数据共享的方式。当某个应用程序的数据需要与其他应用程序共享时,内容提供器就会发挥作用。一个Content Provider类实现一组标准的方法,能够让其他的应用保存或者读取此内容提供器处理的各种数据类型,即一个应用程序可以通过实现一个Content Provider的抽象接口将自己的数据暴露出去。外界根本看不到,也不用看到该应用程序暴露的数据是如何存储的,外界可以通过这一套标准及统一的接口读取应用程序的数据,也可以删除应用程序的数据。3.2 Android应用程序结构解析 一个完整的Android应用程序通常由Activity,Intent,Service,ContentProvider四个组件来构建。然而,并不是所有的Android应用程序都必须具备上面的四个组件,可以由上面的一个或几个来组建。当决定使用以上哪些组件来构建Android应用程序时,需要将它们注册在AndroidManifest.xml文件中。3.2.1 Activity概述 Activity是Android应用程序中最基本的组成单位,主要负责创建显示窗口,一个Activity对象通常就代表了一个单独的屏幕。Activity是用户唯一可以看得到的组件,几乎所有的Activity都是用来与用户进行交互的。在Android 应用中,如果需要有显示的界面 ,则在应用中至少要包含一个Activity类。Activity用于提供可视化的用户界面,是Android应用中使用频率最高的组件。在具体实现时,每个Activity都被定义为一个独立的类,并且继承Android提供的android.app.Activity。 在Activity类中将使用setContentView()方法来显示由视图控件组成的用户界面,并对通过这些视图控件所触发的事件做出相应。 Android会把每个从主菜单打来的程序保留在堆栈中。当打开一个新屏幕时,之前的屏幕会被置为暂停状态并且压入历史堆栈中;在包含多个Activity类的情况下,这些Activity可以通过一个Activity栈来进行管理,当一个新的Activity启动的时候,它首先被放置在Activity栈顶并成为运行状态的Activity,之前正在运行的Activity也在栈中,将被保存在新的Activity后边,只有当这个Activity推出以后,之前的Activity才能重回到前台界面。3.2.2 Intent概述 交互是扩展手机应用功能所必需的因素,通过相互之间的交互,手机能够支持复杂的应用。为此,Android系统提供了终端用户用于开发应用程序交互功能的组件,这些组件包括广播接收器、意图、适配器以及内容提供器。 Intent是Android的核心组件,利用消息实现应用程序间的交互机制,这种消息描述了应用中一次操作的动作、数据以及附加数据,系统通过该Intent的描述负责找到对应的组件,并将Intent传递给调用的组件,完成组件的调用。3.2.3 Service简介 按照工作的方式不同,Android应用程序分为前台应用程序和后台服务程序。Service对应的程序是后台服务程序,可使用startService()方法将指定的应用转到后台运行,即不改变当前运行程序的控制权。 Service分为以下两种类型:本地服务和远程服务。 本地服务主要在应用程序内部使用,用于实现应用程序本身的任务;远程服务主要在应用程序之间使用,一个应用程序可以使用远程服务调用其他的应用程序。 Service用于创建后台运行的程序,后台服务往往需要运行较长时间,甚至可能会从系统启动时开始运行到系统关闭时结束。Service一般不与用户进行交互,并且运行时不会获取控制权。Service有自己的生命周期,可以调用Context.startService()来启动一个服务。服务启动后,这个服务会一直运行,知道使用Context.stopService()方法结束服务。 Service具有以下特点:(1)没有用户界面,不与用户交互;(2)长时间运行,不占程序控制权;(3)比Activity的优先级高,不会轻易被Android系统终止,即使Service被系统终止,在系统资源恢复后,Service仍将自动运行。(4)用于进程间通信,解决两个不同进程之间的调用和通信问题。 创建一个Service类时,需要继承android.app.service类,并且覆盖其onCreate()、onStart()以及onDestroy()等方法。这些方法在Service生命周期中的不同阶段被调用: onCreate()方法用来初始化Service,标志Service生命周期的开始; onStart()方法用来启动一个Service,代表Service进入了运行状态; onDestry()方法用来释放Service所占用的资源,标志Service生命周期的结束。 要想使用代码中定义的Service类,必须在AndroidManifest.xml配置文件中使用元素声明该Service,并在元素中添加制定如何访问该Service。 可以通过两种方式启动Service:启动方式和绑定方式。启动方式使用Content.startService()启动Service,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果在调用startService()方法前服务已经被创建,系统则会直接调用onStart()方法启动服务,此时不会调用onCreate()方法多次创建服务。绑定方式是通过调用Context.bindService()启动服务的,如果Service还未创建,则调用onCreate()方法来创建Service,然后调用onBind()方法返回客户端一个IBinder接口。因为同一个Service可以绑定多个服务连接,通过捆绑方式可以同时为多个不同的应用提供服务。 当Service完成动作或处理后,应该调用相应的方法停止服务,释放服务所占用的资源。根据启动方式的不同,停止Service的方法也不同。使用Context.startService()方法启动的Service,通过调用Context.stopService()或Service.stopSelf()方法结束;使用Context.bindService()绑定的Service,通过调用Context.unbindservice()解除绑定,系统最终会调用onDestroy()销毁服务并释放资源。3.2.4 ContentProvider简介 在Android中,每个应用程序都有自己的userID,在自己的进程中执行。这样做的好处是,可以保护系统及应用程序,避免被其他不正常的应用程序所影响。ContentProvider是Android提供的应用组件,定义在android.content包下面,通过这个组件可访问Android提供的应用数据。作为应用程序之间唯一的共享数据的途径,ContentProvider的主要功能是存储、检索数据,并向应用程序提供访问数据的接口。Android系统为一些常见的应用(如音乐、视频、图像、联系人列表等)定义了相应的ContentProvider,它们被定义在vider包下。另外,只有在AndroidManifest.xml配置文件中添加许可,才能访问ContentProvider中的数据。 定义一个ContentProvider必须实现insert()、delete()、update()、query()和getType()这几个操作数据的抽象方法。在ContentProvider中,数据模型和URI是两个重要的概念。数据模型是ContentProvider将其存储的数据以数据表的形式提供给访问者。在数据表中,每一行为一条记录,而每一列为具有特定类型和意义的字段。每一条数据记录都包括一个_ID数据列,该字段唯一标识一个记录。 URI是每一个ContentProvider对外提供的自身数据集的唯一标识,若一个ContentProvider管理多个数据集,这个ContentProvider将会为每个数据集分配一个独立且唯一的URI。URI后面可以加上记录的ID值,Android提供了两种方法用于在URI后扩展一个记录的ID。因为几乎所有的ContentProvider的操作都会用到URI,通常将URI定义为常量,这样在简化开发的同时也提高了代码的可维护性。 应用程序不能直接访问ContentProvider中的数据,可通过Android系统提供的ContentResolver来间接访问。ContentResolver提供了对ContentProvider的数据进行查询、插入、修改和删除等操作的方法,在开发过程中是间接通过操作ContentResolver来操作ContentProvider的。可以有多个ContentResolver在不同的应用程序和不同进程之间与ContentProvider进行交互。3.3 Android活动的生命周期 Activity具有生命周期,由Android框架进行管理,而不是由应用程序直接控制。通常,每一个应用程序,都会占据一个进程。当系统内存即将不足的时候,会依照优先级自动进行进程的回收。不管是使用者或开发者,都无法确定应用程序何时会被回收。3.3.1活动的生命状态 在整个生命周期中共有四种状态,激活或者运行状态、暂停状态、停止状态、终止状态。 激活或者运行状态:此时Activity运行在屏幕的前台; 暂停状态:此时Activity失去了焦点,但是依然对用户可见。活动处在暂停状态时,用户无法与原活动互动。处于暂停状态和停止状态的Activity仍然保存了其所有的状态和成员信息,直到被系统终止。当被系统终止的Activity需要重新再显示的时候,它必须完全重新启动,并且将关闭之前的状态全部恢复回来。 停止状态:停止状态是指有其他活动正在执行,而这个活动己经离开屏幕,不再动作的状态,此时Activity被其他Activity覆盖。 终止状态:此时Activity将会被系统清理出内存。3.3.2 活动的状态转换 Activity从一个状态运行到另一个状态,状态改变时会执行相应的生命周期方法。Android中的android.app.Activity类定义了Activity生命周期中所包含的8个方法,这8个方法定义了Activity完整的生命周期。 onCreate()方法,在Activity初次创建时被调用,在该方法中一般进行一些静态设置。如果Activity是首次创建,本方法后将会调用onStart(),如果Activity是停止后重新显示,则调用onRestart(); onStart()方法,当Activity对用户即将可见的时候调用; onRestart()方法,当Activity从停止状态重新启动时调用; onResume()方法,当Activity将要与用户交互时调用此方法,此时Activity在Activity栈的栈顶,用户输入信息可以传递给它。如果其他的Activity在它的上方恢复显示,则调用onFreeze(); onFreeze()方法,当Activity被暂停而其他的Activity恢复与用户交互的时候,该方法将会被调用,其后总是调用onPause(); onPause()方法,当系统要启动一个其他的Activity时,这个方法将被调用,用于提交持久数据的改变、停止动画等; onStop()方法,当另外一个Activity恢复并遮盖住当前的Activity,导致其对用户不再可见时,这个方法将被调用; onDestroy()方法,在Activity被销毁前所调用的最后一个方法。 由实际运行来看,我们可以归纳出所有Android应用程序都遵循的运作流程,如图所示。图3-1 Android的活动周期 一般启动 启动一个活动的基本流程为onCreate一onStart一onResume。该流程首先分配资源给这个活动(创建状态),然后将活动的内容显示到屏幕上(启动状态);在一切就绪后,取得屏幕的控制权(恢复状态),用户可以开始使用这个程序。调用另一个活动 调用另一个活动的基本流程为onPause(l)一onCreate(2)一onStart(2)一onResume(2)一onStop(l)。该流程首先冻结原来的活动,再交出屏幕控制权;直到活动2完成一般启动流程后,活动1才会被停止。回到原来活动 回到原来活动的基本流程为onPause(2)一onRestart(1)一onStart(l)一onResume(1)一onStop(2)一onDestroy(2)。另外按返回键也可以回到原来的活动。退出结束 退出结束的基本流程为onPause一onStop一onDestroy。如果程序中有直接调用finish方法来关闭活动的话,系统会跳过先冻结的阶段,直接暂停,停止,然后销毁。回收后再启动回收后再启动的基本流程为onCreate一onStart一onResume。如果被回收掉的活动一旦又重新被调用时,会像一般启动一样再次调用活动的onCreate方法。 Android的生命周期还可以根据不同的标准分为完整生命周期、可见生命周期和前台生命周期。 从Activity最初调用onCreate()方法到最终调用onDestroy()方法的这个过程称为完整生命周期。Activity会在onCreate()方法中进行所有全局状态的设置,在onCreate()方法中释放其占据的所有资源。 可见生命周期是从Activity调用onStart()方法开始,到调用对应的onStop()方法为止的这个过程。在这段时间内,用户可以在屏幕上看到这个Activity。在这两种方法之间,用户可以维护Activity在显示时所需的资源。因为每当Activity显示或者隐藏时都会调用相应的方法,所以onStart()方法和onStop()方法在整个生命周期中可以多次被调用。 从Activity调用onResume()方法开始,到调用对应的onPause()方法为止的这个过程称为前台生命周期。在这段时间内,当前的Activity处于其他所有Activity的前面,且可以与用户交互。 3.4 Intent的详细解析 Intent由动作、数据、分类、类型、组件和扩展信息等内容组成,每个组成部分都有相应的属性组成,并提供设置和获取相应属性的方法。3.4.1 Intent组成属性 Action属性用于描述Intent要完成的动作,对要执行的动作进行一个简要描述。Intent类定义了一系列的Action属性常量,用来标识一套标准动作; Data属性是执行动作的URI和MIME类型; Category属性指明一个执行Action的分类,Intent中定义了一系列的Category属性常量; Component属性用于指明Intent的目标组件的类名称。如果指定了Component这个属性,Intent则会直接根据组件名查找到相应的组件。指定Component属性后,Intent的其他属性都是可选的。因此,可以将Intent分为显式Intent和隐式Intent两类; Extra属性用于添加一些附加信息,利用该属性可以进行消息的传递。3.4.2 Android如何使用Intent 在应用中,可以以两种形式来使用Intent: 显式Intent:指定了组件属性的意图。通过指定具体的组件类,通知应用启动对应的组件。 隐式Intent:没有指定组件属性的意图。这些意图需要包含足够的信息,这样系统才能根据这些信息,在所有的可用组件中,确定满足此意图的组件。 隐式Intent的解析机制 对于隐式Intent,Android需要解析。解析机制主要是通过查找己注册在AndroidManifest.xml中的所有意图过滤器及其中定义的意图,最终找到匹配的意图。在这个解析过程中,Android是通过意图的动作、数据类型、类别这三个属性来进行判断的。通过解析,将意图映射给可以处理此意图的活动、意图接收器或服务。Android应用程序的核心组件都是通过Intent Filter来通告其所具备的能力,即可以处理和相应哪些Intent。Android提供了两种生成Intent Filter的方式:一种是通过Intent Filter类生成;另一种通过在配置文件AndroidManifest.xml中定义元素生成。 在AndroidManifest.xml配置文件中,Intent Filter以元素来指定,一个组件中可以有多个元素,每个元素描述不同的功能。元素中常用、和这些子元素,分别对应Intent中Action、Data、Category属性,用于对Intent进行匹配。 元素 子元素:一个元素下至少需要包含一个子元素,否则所有的Intent都会因匹配失败而被阻塞,这样系统才能处理Intent消息; 子元素:一个可以添加多个子元素,但Category属性不能为空,否则也会匹配失败; 子元素:一个中可以包含多个元素,用于指定组件可以执行的数据。每个子元素具有以下几个属性。其中host指定一个有效的主机名,scheme要求一种特定的模式,path指定URI的有效路径,port指定主机端口,mimeType指定MIME类型。这些属性都是可选的,但彼此之间并不是完全独立的,Intent对象和过滤器都可以用通配符匹配子类型字段,数据检测既要检测URI,也要检测数据类型,可参考如下规则。 (1)一个Intent对象既不包含URI,也不包含数据类型:仅当过滤器不指定任何URI和数据类型时,检测才不能通过,否则都能通过; (2)一个Intent对象包含URI,但不包含数据类型:仅当过滤器不指定数据类型,同时他们的URI匹配,才可通过检测; (3)一个Intent对象包含数据类型,但不包含URI:仅当过滤只包含数据类型且与Intent相同,才通过检测; (4)一个Intent对象既包含URI,也包含数据类型时,数据类型部分只有与过滤器中的某一个匹配才算通过,URI部分要出现在过滤器中,或者过滤器没有假指定URI。3.5 Android系统服务 Android提

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论