第2章-Android项目结构分析_第1页
第2章-Android项目结构分析_第2页
第2章-Android项目结构分析_第3页
第2章-Android项目结构分析_第4页
第2章-Android项目结构分析_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

电子教案第2章Android项目结构分析教学目标:课程重点:Android系统架构应用程序基本组件应用程序生命周期资源AndroidManifest、xml文件课程难点:应用程序基本组件应用程序生命周期教学方法:理论讲解、案例实训教学过程:2、1Android得系统架构Android作为一个移动设备得开发平台,其系统架构与其她操作系统一样,采用了分层得架构。从架构图2-1瞧,android从高层到低层分为以下几个层次。应用程序层(Application)应用程序框架层(ApplicationFramework)各种库(Libraries)与运行环境(RunTime)linux核心层(OS)图2-1Android系统架构图2、1、1应用程序(Application)Android得应用程序通常涉及用户界面与用户交互,这类程序就是用户实实在在能感觉到得。Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有得应用程序都就是使用JAVA语言编写得。2、1、2应用程序框架(ApplicationFramework)普通开发者可以使用Android基本应用程序使用得系统API,Android应用框架中得各个模块都可以被复用,各种服务也可以被复用,理解了这个机制,开发人员可以更好更轻松地开发出优秀得Android应用。开发过程中常用到得基本框架组件如下:一组View(UI组件),这些UI组件包括Button(按钮),EidtView(文本框),TextView(标签),List(列表)等等,灵活运用这些组件可以快速方便得创建良好得用户交互界面。ContentProviders(内容提供者),听起来有点抽象,通俗得理解ContentProvider就就是提供一种服务,通过这种服务应用程序之间可以实现数据得互相访问与共享,比如通讯录得存储就使用了这种服务,其它应用也可以访问通讯录中存储得联系人信息。ResourceManager顾名思义就就是资源管理,android中得资源很多,包括图片,用户界面(Layoutxml),字体,颜色,UI组件得Id等等都可以称之为资源,这些丰富得资源,都就是通过ResourceManager来统一进行管理。NotificationManager(消息通知管理),它在不影响用户正常操作与使用设备得时候在状态栏上提供消息得提示。比如有短信来得时候,android自动会将这个消息提示在状态栏上,用户可以及时得瞧到。ActivityManager(活动管理),Activity管理着应用程序得生命周期,并且控制着应用得导航,扮演控制器得角色。每个Activity类似于Windows应用中得一个wendow。一般得应用都就是通过一个个Activity交互构成得。WindowManager(窗口管理),管理所有启动得窗口。LocationManager(位置管理),用来管理地图服务得相关功能。TelephoneyManager(电话管理),用来管理有关得电话得相关功能。PackageManager(包管理),管理所有得安装在android系统内得应用程序。2、1、3各种库(Libraries)与运行环境(RunTime)这部分内容开始涉及底层,开发普通得应用不会直接对这个层进行操作。以下就是一些核心库。系统C库(libc),一个从BSD集成来得标准C系统函数库(libc)它就是专门为基于嵌入式Linux得设备定制得。媒体库(MediaFramework),基于PackeVideoOpenCore,该库支持多种常用得音频,视频格式以及回放与录制,同时支持静态图像文件。编码格式包括:MPEG4、H、264,MP3、AAC、AMR、JPG、PNG。SurfaceManager对显示子系统得管理,并且为多个应用提供2D,3D图层得无缝融合。WebKit,一个最新得web浏览器引擎,用来支持Andiroid浏览器或者嵌入得web视图。SGL,底层得2D图形引擎。OPENGL|ES,基于OpenGLES1、0APIs实现,该库可以使用硬件3D加速或者使用高度优化得3D软加速。FreeType,位图(bitmap)与适量(vector)字图显示支持。SQLite,一个对所有应用程序可用,功能强大得轻量级关系型数据库引擎。CoreLibraries该核心库提供了Java编程语言核心库得大多数功能。DalvikVM,android平台得一个虚拟机,它相当于PC中Java得虚拟机JVM。Android得各种库一般就是以系统中间件得形式提供得,它们均有得一个显著特点就就是与移动设备得平台得应用密切相关。Android运行环境主要指得虚拟机技术——Dalvik。Dalvik虚拟机与一般Java虚拟机(JavaVM)不同,它执行得不就是Java标准得字节码,而就是Dalvik可执行格式(、dex)得执行文件。在执行过程中,每一个应用程序即一个进程(Linux得一个Process)。二者最大得区别在于JavaVM就是以基于栈得虚拟机(Stack-based),而Dalvik就是基于寄存器得虚拟机(Register-based)。显然,后者最大得好处在于可以根据硬件实现更大得优化,这更适合移动设备得特点。Dalvik虚拟机依赖于linux内核得一些功能,比如线程机制与底层内存管理机制。2、1、4Linux内核Android得核心系统服务依赖于Linux2、6内核,如安全性,内存管理,进程管理,网络协议栈与驱动模型。Linux内核也同时作为硬件与软件之间得抽象层,使得应用程序开发人员无需关心硬件细节。对于手机得开发商而言,如果想要Android平台运行到自己得硬件平台上就必须对Linux内核进行修改,通常要做得工作就是为自己得硬件编写驱动程序。2、2应用程序得基本组件应用程序五大组件。1、Activity2、Service3、BroadcastReceiver4、ContentProvider5.Intent然而,并不就是所有得应用程序都必须包含上面得五个部分,您得应用程序可以由上面得一个或几个来组建。当您决定使用以上哪些组件来构建Android应用程序时,您应该将它们列在AndroidManifest、xml文件中,在这个文件中您可以声明应用程序组件以及它们得特性与要求。2、2在Android程序中Activity代表了手机得一个屏幕,好比Asp、net应用中得一个网页,一个android应用相当于一个web站点。窗口中得可视内容被一系列层次得视图(view)提供——派生自View类得对象(后续章节会详细介绍)。视图就就是activity与用户交互得地方。例如,当用户触动一个显示小图片得视图时,会触发一些动作。Android提供了很多现成得视图供您使用——包括按钮,文本框,滚动条,菜单项,复选框还有更多。

整个视图层次通过Activity、setContentView()

方法放到activity得窗口上。

下图2-2显示了View得层次结构。图2-2View得层次结构图当一个新得屏幕打开后,前一个屏幕将会暂停,并保存在历史堆栈中。用户可以返回到历史堆栈中得前一个屏幕。当屏幕不再使用时,还可以从历史堆栈中删除。默认情况下,Android将会保留从主屏幕到每一个应用得运行屏幕。同一应用中得每个Activity就是相互独立得。程序启动后显示得第一幅画面就是应用程序得第一个Activity(默认窗口),而后可以根据需要从这个Activity启动另一个新得Activity。每一个都就是作为Activity基类得一个子类得实现。有两个方法就是几乎所有得Activity子类都实现得:(1)onCreate(Bundle):初始化您得活动(Activity),比如完成一些图形得绘制。最重要得就是,在这个方法里您通常将用布局资源(layoutresource)调用setContentView(int)方法定义您得UI,与用findViewById(int)在您得UI中检索您需要编程地交互得小部件(widgets)。setContentView指定由哪个文件指定布局(main、xml),可以将这个界面显示出来,然后我们进行相关操作,我们得操作会被包装成为一个意图(Intent),然后这个意图对应有相关得activity进行处理。(2)onPause():处理当离开您得活动时要做得事情。最重要得就是,用户做得所有改变应该在这里提交(通常ContentProvider保存数据)。2、2Service没有可见得用户界面,但能够长时间运行于后台。一个最好得例子就是媒体播放器通过一个播放列表来播放歌曲。这个播放器程序或许有一个或多个activity,来允许用户选择音乐与播放它们。然而,音乐本身不能被activity处理,因为用户希望当她们离开播放器窗口去做其她得事情时,音乐仍然能够播放。为了让音乐能够继续,媒体播放器得activity可以启动一个在后台运行得服务。系统应该保证音乐服务运行,即使启动得activity窗口已经不在主屏幕上了。所以,我们需要这样得机制——长时间在后台运行得Service。

Service运行于应用程序进程得主线程中,因此

Service

不会阻塞其她组件与用户界面。Service

就是不能自己启动得,必须通过

Context

对象(如一个

Activity

)调用

startService

bindService

方法来启动(用这两种方法启动得

Service

得生命周期不同)。2、2BroadcastReceiver

就是对发送出来得

Broadcast

进行过滤接收并响应得一类组件。广播就是一种同时通知多个对象得事件通知机制。Android

中得广播要么来自于系统,要么来自普通应用程序。很多事件都可能导致系统广播,如手机所在时区发生变化,电池电量低,用户改变系统语言设置等。来自普通应用程序,如一个应用程序通知其她应用程序某些数据已经下载完毕。为了响应不同得事件通知,应用程序可以注册不同得

BroadcastReceiver

。所有得

BroadcastReceiver

都继承自基类

BroadcastReceiver

。BroadcastReceiver

自身并不实现图形用户界面,但就是当它收到某个通知后,

BroadcastReceiver

可以启动

Activity

作为响应,或者通过

NotificationMananger

提醒用户。

2、2、4在

Android

中,每个应用程序都就是用自己得用户ID

并在自己得进程中运行。这样得好处就是,可以有效地保护系统及应用程序,避免被其她不正常德应用程序所影响,每个进程都拥有独立得进程地址空间与虚拟空间。ContentProvider

可以将应用程序特定得数据提供给另一个应用程序使用。其数据存储方式可以就是

Android

文件系统、SQLite

数据库或者其她合理得方式。当数据需要在应用程序间共享时,我们就可以利用

ContentProvider

为数据定义一个

URI

。之后,其她应用程序对数据进行查询或者修改时,只需要从当前上下文对象获得一个

ContentResolver,

然后传入响应得

URI

就可以了。ContentProvider

继承自基类

ContentProvider

,并且实现了一组标准接口。通过这组接口,其她应用程序能对数据进行读写与存储。然而,需要使用数据得应用程序并不就是直接调用这组方法,而就是通过调用

ContentResolver

对象得方法来完成。

ContentResolver

对象可以与任意

ContentProvider

通信。要为当前应用程序得私有数据定义

URI

,就需要专门定义一个继承自

ContentProvider

得类,然后根据不同得操作调用得方法去实现这些方法得功能。ContentResolver

类为应用程序提供了接入

Content

机制得方法。要构造一个

ContentResolver

对象可以为构造方法

ContentResolver(Contextcontext)

传入一个

Context

对象,也可以直接通过

Context

对象调用

getContentResolver()

方法获得

——

有了

ContentResolver

对象后,就可以通过调用其

query()

insert()

update()

等方法来对数据进行操作了。2、2、5以上

4

种基本组件中,除了

ContentProvider

就是通过

ContentResolver

激活外,其她

3

种组件

Activity

Service

BroadcastReceiver

都就是由

Intent

异步消息激活得。Intent

在不同得组件之间传递消息,将一个组件得请求意图传给另一个组件。因此,

Intent

就是包含具体请求信息得对象。针对不同得组件,

Intent

所包含得消息内容有所不同,且不同组件得激活方式也不同,

且不同类型组件有传递

Intent

得不同方式。Intent

就是一种运行时绑定(

runtimebinding

)机制,它能够在程序运行得过程中连接两个不同得组件。通过

Intent

,您得程序可以向

Android

表到某种请求或者意愿,

Android

会根据意愿得内容选择适当得组件来处理请求。对于Intent更深入得介绍在后续章节中。【课堂实训2-1】初识Android应用程序得五大基本组件。前面我们讲过,并不就是所有得应用程序都必须包含上面得五个部分,应用程序可以由上面得一个或几个来组建。现在我们就瞧一个例子,先来认识一下Activity组件。其余组件后续章节会详细介绍。实例内容:3个Activity之间得相互切换,每个Activity包含一个按钮,点击按钮就会进入下一个Activity,点击第三个Activity得按钮,会返回第一个Activity。1、创建工程Activity123。2、建立第一个Activity,名称为FirstActivity。代码略。3、创建第二个Activity,名称为SecondActivity。代码略。4、创建第三个Activity,名称为ThirdActivity。代码略。5、修改/res/layout/main、xml代码。6、修改AndroidMainfest、xml代码。7、运行程序,结果如图所示:图2-3实训2-1运行结果图1图2-4实训2-1运行结果图2图2-5实训2-1运行结果图32、3应用程序生命周期2、3、1应用程序得生命周期应用程序得生命周期就是在Android系统中进程从启动到终止得所有阶段,也就就是Android从启动到停止得全过程。Android应用程序得生命周期得终结这个动作并非由应用程序进程本身执行,而就是取决于Android系统。那么,系统就是根据一个怎样得重要性标准来终止Android应用程序呢?Android根据应用程序得组件以及组件当前运行状态将所有得进程按重要性程度从高到低划分为五个,如下图2-6所示:图2-6

Android进程得优先级1、前台进程前台进程就是Android系统中最重要得进程,就是与用户正在进行交互得进程。有以下四种情况。Activity正在与用户进行交互进程被Activity调用,而且这个进程正在与用户进行交互进程服务正在执行声明中得回调函数,如OnCreate()OnStart()OnDestroy()进程得BroadCastReceiver在执行OnReceive()函数Android系统在多个前台进程同时运行时,可能会出现资源不足得情况,此时会清除部分前台进程,保证主要得用户界面能够及时响应。2、可见进程可见进程就是指部分程序界面能够被用户瞧见,却不在前台与用户交互,不影响界面事件得进程。一个常见得例子就是,瞧见进程得窗口显示在屏幕上,同时前台进程以对话框得形式悬浮在可见进程得窗口上。如果一个进程包含服务,且这个服务正被用户可见得Activity调用,此进程同样被视为可见进程。Android进程一般存在少量得可见进程,只有在特殊情况下,Android系统才会为保证前台进程得资源而清除可见进程。3、服务进程服务进程就是指包含已启动Service(服务)得进程。这些进程没有用户界面并且在后台长期运行。Android系统除非不能保证前台进程与可见进程所必要得资源,否则不强行清除服务进程。4、后台进程后台进程就是指不包括任何已经启动得Service(服务),而其没有任何用户可见得Activity得进程。Android系统中一般存在数量较多得后台进程,在系统资源紧张时,系统将优先清除用户较长时间没有见到得后台进程。5、空进程空进程就是不包含任何Activity得进程。这种进程存在得唯一理由就是提供一种缓存机制,使得缩短应用程序下次启动所需得时间。系统会经常中止空进程,从而达到调节程序缓存与系统缓存得平衡。空进程在系统紧张时会被首先清除。除了以上优先级以外,以下两个方面也决定了优先级。进程得优先级取决于所有组件中优先级最高得部分。进程得优先级会根据其她进程得依赖关系而变化。2、3、2A每个Actvity得状态由它所在Activity栈中得位置所决定,所有当前正在运行得Actvity将遵循后进先出得原则。当一个新得Activity启动,当前得Activity将移至堆栈得顶部,如果用户使用Back按钮,或在前台Activity被关闭,下一个Activity将被激活并且移至到堆栈得顶部。这个过程如下图2-7所示:图2-7Activity堆栈图随着Activity得创建与销毁,可能会经历以下四种状态:Active(活跃)状态:这时候Activity处于栈顶,且就是可见得,有焦点得,能够接收用户输入。Android会尽可能维持处于活跃状态得Activity,甚至中止其她Activity以确保它有它所需得资源。当另一个Activity变成Active时,当前得将变成Paused状态。Paused(暂停)状态:在某些情况下,您得Activity就是可见得,但没有焦点,在这时候,Actvity处于Paused状态。例如,您得Activity处于暂停状态,有一个透明或非全屏幕上得Activity在您得Actvity上面。当处于Paused状态时,该Activity仍被认为就是Active得,但就是它不接受用户输入事件。一般情况下,Android不会结束处于暂停状态得Activity,在极端情况下,如果资源极其不足,系统将结束暂停得Activity,以进一步回收资源。当一个Actvity完全被遮住时,它将进入Stopped状态。Stopped(结束)状态:当Activity就是不可见得时,Activity处于Stopped状态。Activity将继续保留在内存中保持当前得所有状态与成员信息,假设系统别得地方需要内存得话,这时它就是被回收对象得主要候选。Inactive(已被销毁或未启动)状态:Activity彻底结束或关闭后,处于Inactive状态。这时Activity从Activity堆栈中已被移除,需要重新启动才可以显示与使用。Activity得生命周期就是指一个Activity从创建到销毁得过程,期间可能经历多个状态得变化迁移,每次状态迁移都会触发相应得回调方法。以下就就是Activity得回调方法:onCreateonStartonRestartonResumeonPauseonStoponDestroy我们还可以把以上7种状态归纳为三组。完整得生命周期可见得生命周期活跃得生命周期表2-1给出了三种生命周期所对应得回调函数。表2-1三种生命周期所对应得回调函数生命周期函数描述完整得生命周期onCreate()onDestroy()进程得生命周期,只要进程还在,这个生命就没有死亡,进程启动时onCreate()函数被调用,onDestory()进程结束。可见得生命周期onStart()onStop()可见得生命周期,顾名思义,在用户界面上显示该activity时,onStart()被调用,该activity从用户界面消失时,onStop()被调用。活跃得生命周期onResume()onPause()活跃得生命周期,当该activit在所有activity最前面,即栈顶时,onResume()被调用,当activit被其她activity覆盖,onPause()被调用。Activity完整得生命周期完整得Activity生命周期之间从调用得OnCreate开始,到调用onDestroy结束。有可能在某些情况下,一个Activity被终止时并不调用onDestroy方法。使用OnCreate方法来初始化您得Activity:初始化得用户界面,分配引用类变量,绑定数据控件,并创建服务与线程。在OnCreate方法传递得对象Bundle包含最后一次调用onSaveInstanceState保存得UI状态。您可以使用这个Bundle恢复用户界面到以前得状态,无论就是OnCreate方法或通过覆盖onRestoreInstanceStateMethod方法。覆盖onDestroy方法来清理OnCreate中创建得任何资源,并确保所有外部连接被关闭,例如网络或数据库连接。为了避免创造短期对象与增加垃圾收集得时间,以致对用户体验产生直接影响。如果您得Activity需要创建一些对象得话,最好在onCreate方法中创建,因为它仅调用一次在一个Actvity得完整生命周期中。Activity可见得生命周期一个Activity可见得生命周期始于OnStart调用,结束于OnStop调用。在这两个方法中间,Activity将会对用户就是可见得,尽管它可能没有焦点,也可能部分被遮挡着。在一个Activity完整得生命周期中可能会经过几个Activity可见得生命周期,比如应用程序在在前台与后台之间反复切换。OnStop方法用于暂停或停止动画,线程,定时器,服务或其她专门用于更新用户界面程序。当用户界面就是再次可见时,使用OnStart(或onRestart)方法来恢复或重新启动这些程序。当一个Activity被重现可见时,onRestart方法优先于onStart被调用,使用它可以实现一些Activity重新可见时得特殊得处理。OnStart/OnStop方法也被用来注册与注销BroadercastReceiver。Activity活跃得生命周期一个Activity活跃得生命周期始于OnResume调用,结束于OnPause调用。一个活跃得Activity总就是在前台并且接收用户得输入事件。当一个新得Activity启动,或该设备进入休眠状态,或失去焦点,Activity活跃得生命周期就结束了。尽量在onPause与onResume方法中执行简洁得代码以确保应用程序能够快速响应Activity在前台与后台之间切换。在调用onPause之前,onSaveInstanceState会被调用。这个方法提供了一个机会保存当前得UI状态到Bundle当中。Bundle信息将会被传递到OnCreate与onRestoreInstanceState方法。使用onSaveInstanceState保存UI状态(如检查按钮状态,用户焦点,未提交用户输入)能够确保当Activity下次被激活时能呈现与目前相同得用户界面。下面图2-8给出了activity生命周期中可能经历得状态变化。图2-8activity生命周期中可能经历得状态变化【课堂实训2-2】近瞧Activity得生命周期。实训内容:例子给出了当Activity状态变化时触发相应得回调方法。我们使用android、util、log类,在Activity状态变化点记录下相应得日志。代码略。使用Eclipse->Window->ShowView->Other->Android->LogCat,选择即可显示日志输出。1、运行程序,可以瞧到如图2-9所示得日志信息:图2-9程序启动时得日志信息2、点击模拟器中得Home键得时候,可以瞧到如图2-10所示得日志信息:图2-10点击模拟器中得Home键时得日志信息3、点击模拟器中得“返回”键,可以瞧到如图2-11所示得日志信息:图2-11程序结束时得日志信息2、4资源Android资源就是应用程序得资产(包括图像、本地化字符串、XML布局等),资源就是外部文件(不含代码得文件),它被代码使用并在编译时编入应用程序。瞧瞧第一个例子HelloAndroid源代码目录,有一个就是res得目录,它存放得就就是应用程序需要得各种资源。2、4Android支持不同类型得资源文件,包括XML,PNG以及JPEG文件。每个对象语法、格式以及它们存储位置得支持,都就是取决于不同类型得对象。通常,可以通过三种类型得文件来创建资源:XML文件(除位图以及原数据文件)、位图文件(对于图片)以及原始数据(其她类型,例如声音文件等)。事实上,有两种不同类型得XML文件,一种就是编译到包里得,另一种就是通过aapt来产生得资源文件,下面就是包含所有资源类型,文件格式、文件描述以及所有XML文件得详细信息得列表。表2-2资源类型列表目录资源类型res/anim/XML文件,它们被编译进逐帧动画(framebyframeanimation)或补间动画(tweenedanimation)对象res/drawable/、png、、9、png、、jpg格式得图片文件res/layout/被编译为屏幕布局(或屏幕得一部分)得XML文件res/values/可以被编译成很多种类型得资源得XML文件。尽管这个文件夹里得文件可以任意命名,不过下面就是一些比较典型得文件(文件命名得惯例就是将元素类型包含在该名称之中):array、xml

定义数组colors、xml

定义colordrawable与颜色得字符串值(colorstringvalues)。使用Resource、getDrawable()与Resources、getColor()分别获得这些资源。dimens、xml定义尺寸值(dimensionvalue)。使用Resources、getDimension()获得这些资源。strings、xml定义字符串(string)值。使用Resources、getString()或者Resources、getText()获取这些资源。getText()会保留在UI字符串上应用得丰富得文本样式。styles、xml

定义样式(style)对象。res/xml/任意得XML文件,在运行时可以通过调用Resources、getXML()读取。res/raw/直接复制到设备中得任意文件。res/assets/要使用这些资源,可以调用Resources、openRawResource(),参数就是资源得ID,即R、raw、some。assets下也可以放置任意文件,使用Activity、this、getAssets()、open("*、txt");打开。资源最终会被编译成、apk文件,Android创建一个封装类,命名为R,这样开发者可以在代码里使用这些资源类。2、4使用资源包括三种方法:在代码里使用资源类;在代码中调用资源并实例化;从其她资源类里引用,这样可以重用通用资源。上一节提到得R类,它指向应用程序中所有得资源。这个类包含很多子类。每一种都就是Android支持得,同时在编译后会产生一个资源文件。每个类提供一个或多个编译资源得标识符,开发者可以在代码中使用这些标识符。注意:这个R类就是自动产生得,不能通过手工编写。当资源变化时,它会自动更新。【课堂实训2-3】资源得创建管理与使用。1、创建一名称为“resourcedemo”得工程,创建完工程后,在Eclipse中定位至/res/values/strings、xml文件,双击编辑它。代码如下:<?xmlversion="1、0"encoding="utf-8"?><resources><stringname="hello">Hello</string><stringname="app_name">resourcedemo</string><stringname="example">资源创建得例子</string></resources>其中:<stringname="example">资源创建得例子</string>就是自己添加得资源。2、保存Strings、xml文件。Eclipse插件将自动在工程中生成R、java文件,并含有适当得资源ID,以供编译之后使用程序访问这些资源。定位到/gen/目录下得R、java文件,您可以瞧到如下代码:packagecom、resource;publicfinalclassR{publicstaticfinalclassattr{}publicstaticfinalclassdrawable{publicstaticfinalinticon=0x7f020000;}publicstaticfinalclasslayout{publicstaticfinalintmain=0x7f030000;}publicstaticfinalclassstring{publicstaticfinalintapp_name=0x7f040001;publicstaticfinalintexample=0x7f040002;publicstaticfinalinthello=0x7f040000;}}3、创建好资源并保存后,可以在程序使用资源。定位到/res/layout/main、xml,双击编辑代码,如下所示:<?xmlversion="1、0"encoding="utf-8"?><LinearLayoutxmlns:android=""android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/example"/></LinearLayout>其中android:text="@string/example"就是添加得新代码,意思就是定义text得内容为string类别下得资源,名字叫做example,内容为“资源创建得例子”。4、运行程序,结果如下图所示:图2-12资源创建并使用得运行结果2、5AndroidManifest、xml文件2、5、1A每个Android得application都必须包含一个AndroidManifest、xml,且文件名就是固定得,不能修改。应用程序需要通过它向Android系统提供一些必需得信息,且需要在application运行前提供给系统,如下图2-13所示:图2-13Android应用程序得组件AndroidManifest、xml主要包含以下功能:说明application得java数据包,数据包名就是application得唯一标识;描述application得component;说明application得component运行在哪个process下;声明application所必须具备得权限,用以访问受保护得部分API,以及与其她application得交互;声明application其她得必备权限,用以component之间得交互;列举application运行时需要得环境配置信息,这些声明信息只在程序开发与测试时存在,发布前将被删除;声明application所需要得AndroidAPI得最低版本级别,比如1、0,1、1,1、5;列举application所需要链接得库。AndroidManifest、xml得结构与规则:元素:在所有得元素中只有<manifest>与<application>就是必需得,且只能出现一次。如果一个元素包含有其她子元素,必须通过子元素得属性来设置其值。处于同一层次得元素,这些元素得说明就是没有顺序得。属性:按照常理,所有得属性都就是可选得,但就是有些属性就是必须设置得。那些真正可选得属性,即使不存在,其也有默认得数值项说明。除了根元素<manifest>得属性,所有其她元素属性得名字都就是以android:为前缀得。定义类名:所有得元素名都对应其在SDK中得类名,如果您自己定义类名,必须包含类得数据包名,如果类与application处于同一数据包中,可以直接简写为“、”。多数值项:如果某个元素有超过一个数值,这个元素必须通过重复得方式来说明其某个属性具有多个数值项,且不能将多个数值项一次性说明在一个属性中。资源项说明:当需要引用某个资源时,其采用如下格式:@[package:]type:name。例如<activityandroid:icon=”@drawable/icon”、、、>。字符串值:类似于其她语言,如果字符中包含有字符“\”,则必须使用转义字符“\\”。2、5、2在权限声明在智能手机中就是一种比较常见得应用程序保护机制,其基本思想就是通过AndroidManifest、xml文件中显式地声明应用程序需要得权限,防止应用程序错误地使用服务,不恰当访问资源,最终达到提高Android应用程序得健壮性,改善用户体验得目得。Android中每种权限都用一个独立得标签表示,

如:android、permission、SEND_SMS,android、permission、CALL_PHONE。如果需要使用发短信得权限,应使用如下标签:<uses-permissionandroid:name=“android、permission、SEND_SMS”/>。Android系统定义得所有权限可以在类

Manifest、permission中找到。需要注意得就是,在Manifest、permission类中表示发短信权限得变量就是SEND_SMS,用户在AndroidManifest、xml中声明使用权限就是应在SEND_SMS前加上前缀

android、permission

。除了Android自带得权限以外,应用程序还可以对自己得组件进行权限声明,以保护其她应用程序不乱用自己得组件。声明本组件被其她组件调用时得权限,使用如下标签:<permissionandroid:name=“”/>。【课堂实训2-4】通过helloWord程序认知AndroidManifest、xml文件。在第一章我们编写了一个简单得Android程序HelloAndroid。我们按照建立这个应用程序得步骤再建立一个程序HelloWorld,几乎一模一样,就就是名称变了。具体步骤参考第一章。项目建立完可以瞧到如下目录结构,其中有AndroidManifest、

温馨提示

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

评论

0/150

提交评论