Eclipse与Android的应用.docx
- 文档编号:18363769
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:33
- 大小:30.72KB
Eclipse与Android的应用.docx
《Eclipse与Android的应用.docx》由会员分享,可在线阅读,更多相关《Eclipse与Android的应用.docx(33页珍藏版)》请在冰点文库上搜索。
Eclipse与Android的应用
前面介绍了Windows环境下,基于AndroidSDK(2.3)和Eclipse(helios)的
Android开发环境的搭建,并创建了第一个应用程序HelloAndroidWorld。
具体挺参
考小生的blog:
或者
现在,我们已经可以使用Eclipse来创建和开发Android应用程序,本文将仍
以HelloAndroidWorld工程来深入解析Eclipse中Android工程的结构以及调试。
写上篇的时候,刚好AndroidSDKPlatformHoneycombPreview,revision1(android-3.0_pre_r01-linux.zip)已经加入http:
//dl-
Android应用程序是用的AndroidSDKPlatform2.3.1,即Android9AVD进行演
示。
现在AndroidSDKPlatformHoneycombPreview已经放到http:
//dl-
求知若渴的程序员的优秀品质,因此,本次我们使用最新版本的AndroidSDK
PlatformHoneycombPreview来进行我们本次教程。
先看看最新的HoneycombPreview的样子吧(由于是Preview版本,启动确实
不敢恭维,根据传闻,前几天之所以该版本一度无法下载安装是因为google发现
这个Preview版本太烂,面子上挂不住,所以又撤掉了,呵呵):
相比手机上目前使用的最高Android2.3版本而言,Android3.0Honeycomb更
适合平板电脑使用,是专门为Android平板电脑进行优化的系统版本。
随着SDK
的发布,更加有利于开发者和厂商针对Android3.0Honeycomb平板电脑进行开
发,包括Android平板电脑应用和匹配。
一、Android应用程序概述
1.Android的嫡系组件
Android有四项一等公民(或称为嫡系组件),包括:
Activity(活动)、
ContentProvider(内容提供程序)、BroadcastReceiver(广播接收器)与Service(服务)。
它们都必须宣告于AndroidManifest.xml档案里。
Activity活动
活动是最常用的Android应用程序形式。
活动在一个称为视图(后文将介
绍)的类的帮助下,为应用程序提供UI。
视图类实现各种UI元素,比如文本框、
标签、按钮和计算平台上常见的其他UI元素。
一个应用程序可以包含一个或多个活动。
这些活动通常与应用程序中的屏幕
形成一对一关系。
应用程序通过调用startActivity()或startSubActivity()方法从一个活动转移到
另一个活动。
如果应用程序只需“切换”到新的活动,就应该使用前一个方法。
如
果需要异步的调用/响应模式,就使用后一个方法。
在这两种情况下,都需要通过
方法的参数传递一个intent。
由操作系统负责决定哪个活动最适合满足指定的intent(后文将介绍)。
对于Activity,关键是其生命周期的把握(后文将介绍),其次就是状态的保
存和恢复(onSaveInstanceStateonRestoreInstanceState),以及Activity之间的跳转
和数据传输(intent)。
Activity几乎承接着用户对应用程序(Application)的所有操作,Activity应该
有一个窗口(Window),这个窗口是可以通过不用的主题(Theme)改变样子
的。
Activity应该要注意它的生命周期(Lifecycle)、设备状态(Configuration)改
变时的影响以及运行状态和数据的保存,这个在一个应用程序是否可靠和人性化上
至关重要。
Activity里还应该要申明一些许可(Permissions),以便使用Android
的一些软硬件功能,这些申明可以由代码或者Manifest.xml给出。
最后,每个
Activity(的入口)一定要在Manifest当中申明。
Service服务
与其他多任务计算环境一样,“在后台”运行着一些应用程序,它们执行各
种任务。
Android把这种应用程序称为“Service服务”。
Service是没有界面的程序,它是所谓的服务,也叫后台程序。
应该要非常注
意Service的启动(startService)和绑定(bindService)这两种开启Service的方法
之间的关系以及Service对应的生命周期,两种开户Service的方法对Service的生
命周期效果是不同的。
还有就是申明许可以及申明Service,也是在代码内或者
Manifest内申明。
BroadcastReceiver广播接收器
广播接收器是一个应用程序组件,它接收请求并处理intent。
与服务一样,接
收器在一般情况下也没有UI元素。
广播接收器通常在AndroidManifest.xml文件中
注册。
广播接收器的类属性是负责实现这个接收器的Java类。
广播接收并不是通常所说的无线电广播,而是指由sendBroadcast()所发送出来
的意图(Intent),即广播在这里的意思是意图,BroadcastReceiver在注册
(Registe)之后可以自动监听符合预先给定的条件的意图,如果有则会通知此
BroadcastReceiver的持有程序。
ContentProvider内容提供程序——数据管理
内容提供程序是Android的数据存储抽象机制。
我们以移动设备上常见的一
种数据为例:
地址簿或联系人数据库。
地址簿包含所有联系人及其电话号码,用户
在使用手机时可能需要使用这些数据。
内容提供程序对数据存储的访问方法进行抽
象。
内容提供程序在许多方面起到数据库服务器的作用。
对数据存储中数据的读写
操作应该通过适当的内容提供程序传递,而不是直接访问文件或数据库。
可能还有
内容提供程序的“客户机”和“实现”。
ContentProvider是作保存应用程序数据和建立维持数据库之用,以便程序重
新启动时回到以前的状态或者保存信息。
应该注意应用程序的使用权限以及SQL
语言的使用,Android用的是一个轻量级的数据库系统SQLite。
2.Android生命周期
Android程序的生命周期是由系统控制而非程序自身直接控制,这与桌面应用
程序在程序自身收到关闭请求后执行一个特定的动作(比如从main函数中
return)而导致进程结束的思维不同。
在Android系统中,当某个activity调用startActivity(myIntent)时,系统会在
所有已经安装的程序中寻找其intentfilter和myIntent最匹配的一个activity,启动这
个进程,并把这个intent通知给这个activity。
这就是一个程序的“生”。
在
Android中,所有的应用程序“生来就是平等的”,所以不光Android的核心程序
甚至第三方程序也可以发出一个intent来启动另外一个程序中的一个activity。
Android的这种设计非常有利于“程序部件”的重用。
Android根据其重要性在内存不足的时候移去重要性最低的进程。
重要性由高
到低为:
1.前台进程。
这样的进程拥有一个在屏幕上显示并和用户交互的activity或者
它的一个IntentReciver正在运行。
这样的程序重要性最高,只有在系统内存非常
低,万不得已时才会被结束。
2.可见进程。
在屏幕上显示,但是不在前台的程序。
比如一个前台进程以对话
框的形式显示在该进程前面。
这样的进程也很重要,它们只有在系统没有足够内存
运行所有前台进程时,才会被结束。
3.服务进程。
这样的进程在后台持续运行,比如后台音乐播放、后台数据上传
下载等。
这样的进程对用户来说一般很有用,所以只有当系统没有足够内存来维持
所有的前台和可见进程时,才会被结束。
4.后台进程。
这样的程序拥有一个用户不可见的activity。
这样的程序在系统
内存不足时,按照LRU的顺序被结束。
5.空进程。
这样的进程不包含任何活动的程序部件。
系统可能随时关闭这类进
程。
从某种意义上讲,垃圾收集机制把程序员从“内存管理噩梦”中解放出来,
而Android的进程生命周期管理机制把用户从“任务管理噩梦”中解放出来。
Android使用Java作为应用程序API,并且结合其独特的生命周期管理机制同时为
开发者和使用者提供最大程度的便利。
Activity生命周期
Activity中常用的函数有SetContentView()findViewById()finish()
startActivity(),其生命周期涉及的函数有:
voidonCreate(BundlesavedInstanceState)
voidonStart()
voidonRestart()
voidonResume()
voidonPause()
voidonStop()
voidonDestroy()
注意的是,Activity的使用需要在Manifest文件中添加相应的
设置其属性和intent-filter。
Service生命周期
Service可以通过Context.startService()或Context.bindService()创建,通过
Context.stopService()、Service.stopSelf()、Service.stopSelfResult()或
Context.unbindService()来关闭。
其生命周期涉及的函数有:
voidonCreate()
voidonStart(Intentintent)
voidonDestroy()
其中onCreate()和onDestroy()可以被所有服务调用,无论是由
Context.startService()还是Context.bindService()发起的Service。
但是,onStart()只能
被由startService()发起的Service调用。
如果一个Service运行其它对象绑定它,需要扩展如下callback方法:
IBinderonBind(Intentintent)
booleanonUnbind(Intentintent)
voidonRebind(Intentintent)
BroadcastReceiver生命周期
只包含一个方法:
voidonReceive(ContextcurContext,IntentbroadcastMsg)
包含活动的组件的BroadcastReceiver将不会被系统关闭,但是仅包含不活动
的组件的进程将随时会背系统关闭(当其它组建需要内存时)。
3.Intent简介——Android的创新导航与触发机制
前文介绍了Android的四项一等公民:
Activity(活动)、ContentProvider(内
容提供程序)、BroadcastReceiver(广播接收器)与Service(服务)。
这四种组件
是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应
用。
在这些组件之间的通讯中,主要是由Intent协助完成的。
Intent是Android应
用开发里很重要的一个元件,通过Intent可以从一个Activity来启动另一个任意的
Activity,不管是自己定义的还是系统定义的。
在ActivityGroup(extendsActivity)
里面,Intent的flag设置对于子Activity的启动方式至关重要。
Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,
Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组
件,并完成组件的调用。
因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关
信息,实现调用者与被调用者之间的解耦。
Android应用程序框架的强大之处在于它将Web习惯引入到移动应用程序
中。
这并不意味着该平台提供了一个强大的浏览器,也不仅限于使用JavaScript和
服务器端资源,而是涉及Android平台的工作原理以及该平台的用户如何与移动设
备交互这一核心问题。
互联网的强大之处一言以蔽之,在于一切事物通过一次单击
即可获得。
这些单击的内容对于用户来说就是URL(UniformResourceLocator,统
一资源定位符)或URI(UniformResourceIdentifier,统一资源标识符)。
有效使
用URI可帮助用户方便快捷地访问所需的日常信息。
“把链接发给我”就说明了
一切。
在移动设备上复制桌面设备体验的平台只能吸引一小部分忠实的用户。
多级
菜单、多次单击在移动市场中通常都不被人所接受。
移动应用程序对直观易用的要
求比其他任何市场中的应用程序都要高。
Intent和IntentFilter将“单击”范例引入到
了Android平台移动应用程序使用和开发的核心中。
Intent结构
Intent是执行某操作的一个抽象描述,它描述了如下内容:
首先,要执行的动作(action)的一个简要描述,如VIEW_ACTION(查
看)、EDIT_ACTION(修改)等,Android为我们定义了一套标准动作:
MAIN_ACTION
VIEW_ACTION
EDIT_ACTION
PICK_ACTION
GET_CONTENT_ACTION
DIAL_ACTION
CALL_ACTION
SENDTO_ACTION
ANSWER_ACTION
INSERT_ACTION
DELETE_ACTION
RUN_ACTION
LOGIN_ACTION
CLEAR_CREDENTIALS_ACTION
SYNC_ACTION
PICK_ACTIVITY_ACTION
WEB_SEARCH_ACTION
此外,我们还可以根据应用的需要,定义我们自己的动作,并可定义相应的
Activity来处理我们的自定义动作。
其次,执行动作要操作的数据(data),Android中采用指向数据的一个URI
来表示,如在联系人应用中,一个指向某联系人的URI可能为:
content:
//contacts/1。
这种URI表示,通过ContentURI这个类来描述,具体可以参
考.ContentURI类的文档。
此外,除了action和data这两个重要属性外,还有一些附加属性:
category(类别),被执行动作的附加信息。
例如LAUNCHER_CATEGORY
表示Intent的接受者应该在Launcher中作为顶级应用出现;而
ALTERNATIVE_CATEGORY表示当前的Intent是一系列的可选动作中的一个,这
些动作可以在同一块数据上执行。
type(数据类型),显式指定Intent的数据类型(MIME)。
一般Intent的数
据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指
定的类型而不再进行推导。
component(组件),指定Intent的的目标组件的类名称。
通常Android会根
据Intent中包含的其它属性的信息,比如action、data/type、category进行查找,最
终找到一个与之匹配的目标组件。
但是,如果component这个属性有指定的话,将
直接使用它指定的组件,而不再执行上述查找过程。
指定了这个属性以后,Intent
的其它所有属性都是可选的。
extras(附加信息),是其它所有附加信息的集合。
使用extras可以为组件提
供扩展信息,比如,如果要执行“发送电子邮件”这个动作,可以将电子邮件的标
题、正文等保存在extras里,传给电子邮件发送组件。
总之,action、data/type、category和extras一起形成了一种语言。
这种语言
使系统能够理解诸如“查看某联系人的详细信息”之类的短语。
随着应用不断的加
入到系统中,它们可以添加新的action、data/type、category来扩展这种语言。
应
用也可以提供自己的Activity来处理已经存在的这样的“短语”,从而改变这些
“短语”的行为。
解析Intent
在应用中,我们可以以两种形式来使用Intent:
.显式(直接)Intent:
指定了component属性的Intent(调用
setComponent(ComponentName)或者setClass(Context,Class)来指定)。
通过指定具体的组件类,通知应用启动对应的组件。
.隐式(间接)Intent:
没有指定comonent属性的Intent。
这些Intent需
要包含足够的信息,这样系统才能根据这些信息,在在所有的可用组
件中,确定满足此Intent的组件。
对于显式(直接)Intent,Android不需要去做解析,因为目标组件已经很明
确,Android需要解析的是那些隐式(间接)Intent,通过解析,将Intent映射给可
以处理此Intent的Activity、BroadcastReceiver或Service。
Intent解析机制主要是通过查找已注册在AndroidManifest.xml中的所有
IntentFilter及其中定义的Intent,最终找到匹配的Intent。
在这个解析过程中,
Android是通过Intent的action、type、category这三个属性来进行判断的,判断方
法如下:
.如果Intent指明定了action,则目标组件的IntentFilter的action列表中
就必须包含有这个action,否则不能匹配;
.如果Intent没有提供type,系统将从data中得到数据类型。
和action
一样,目标组件的数据类型列表中必须包含Intent的数据类型,否则
不能匹配。
.如果Intent中的数据不是content:
类型的URI,而且Intent也没有明确
指定它的type,将根据Intent中数据的scheme(比如http:
或者
mailto:
)进行匹配。
同上,Intent的scheme必须出现在目标组件的
scheme列表中。
.如果Intent指定了一个或多个category,这些类别必须全部出现在组建
的类别列表中。
比如Intent中包含了两个类别:
LAUNCHER_CATEGORY和ALTERNATIVE_CATEGORY,解析得到
的目标组件必须至少包含这两个类别。
Intent和IntentFilter
Intent是对需要的声明。
IntentFilter是在需要时有能力和有兴趣提供协助的声明。
Intent由一系列描述所需动作或服务的信息构成。
本节将介绍所请求的动作以
及与之相关的数据。
IntentFilter可以是通用的,也可以特定于向某些Intent提供服务。
Intent的动作属性通常为动词,例如VIEW、PICK或EDIT。
很多内置的
Intent动作都是作为Intent类的成员定义的。
应用程序开发人员也可以创建新动
作。
要查看信息,应用程序可以采用以下Intent动作:
Intent的数据部分采用URI
的形式表示,并且可以是信息的任何部分,例如联系人记录、网站位置或对媒体剪
辑的引用。
IntentFilter定义Intent与应用程序之间的关系。
IntentFilter可以与Intent的数
据部分或动作部分相关,或同时与两者相关。
IntentFilter还包含一个category(类
别)字段。
类别可以帮助对动作进行分类。
例如,CATEGORY_LAUNCHER类别
指示Android包含此Intent-Filter的Activity在主应用程序启动器或主界面上应该处
于可见状态。
分发Intent后,系统会计算可用的Activity、Service,以及已注册的
BroadcastReceiver,并将Intent分发给大多数适当的接收者。
IntentFilter通常在应用程序的AndroidManifest.xml中使用
行定义。
从本质上说,AndroidManifest.xml文件就是一个应用程序描述符文件。
下一节介绍,这是Android在移动设备屏幕上显示UI元素的机制。
4.Android视图——显示用户界面(UI)元素
Android活动通过视图显示UI元素。
视图采用以下布局设计之一:
.LinearVertical-后续的每个元素都排在前一个元素下面,形成一个单
一列。
.LinearHorizontal-后续的每个元素都排在前一个元素右边,形成一个
单一行。
.Relative-后续的每个元素相对于前一个元素有一定的偏移量。
.Table-与HTML表相似的一系列行和列。
每个单元格可以包含一个
视图元素。
选择一种布局(或布局的组合)之后,就可以用各个视图显示UI。
视图元素由大家熟悉的UI元素组成,包括:
.Button
.ImageButton
.EditText
.TextView(与标签相似)
.CheckBox
.RadioButton
.Gallery和ImageSwitcher(用来显示多个图像)
.List
.Grid
.DatePicker
.TimePicker
.Spinner(与组合框相似)
.AutoComplete(具有文本自动补全特性的EditText)
视图是在一个XML文件中定义的。
每个元素都有一个或多个属于Android名
称空间的属性。
二、创建AndroidEclipse工程
请参考小生的《AndroidSDK2.3与Eclipse最新版开发环境搭建(五)》,博
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Eclipse Android 应用