用Eclipse开发和调试Android应用程序.pdf
《用Eclipse开发和调试Android应用程序.pdf》由会员分享,可在线阅读,更多相关《用Eclipse开发和调试Android应用程序.pdf(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、no Pain no Gain no Gavin 博客同步更新至:http:/ http:/ 前面介绍了Windows环境下,基于Android SDK(2.3)和 Eclipse(helios)的Android开发环境的搭建,并创建了第一个应用程序Hello Android World。具体挺参考小生的blog:http:/ 或者http:/ Eclipse来创建和开发 Android 应用程序,本文将仍以 Hello Android World 工程来深入解析 Eclipse 中 Android 工程的结构以及调试。写上篇的时候,刚好 Android SDK Platform Honeyc
2、omb Preview,revision 1(android-3.0_pre_r01-linux.zip)已经加入 http:/dl- 应用程序是用的 Android SDK Platform 2.3.1,即 Android 9 AVD进行演示。现在 Android SDK Platform Honeycomb Preview已经放到 http:/dl- Android SDK Platform Honeycomb Preview来进行我们本次教程。先看看最新的 Honeycomb Preview的样子吧(由于是 Preview版本,启动确实不敢恭维,根据传闻,前几天之所以该版本一度无法下载安
3、装是因为 google发现这个 Preview版本太烂,面子上挂不住,所以又撤掉了,呵呵):相比手机上目前使用的最高 Android 2.3 版本而言,Android 3.0 Honeycomb更适合平板电脑使用,是专门为 Android 平板电脑进行优化的系统版本。随着 SDK的发布,更加有利于开发者和厂商针对 Android 3.0 Honeycomb平板电脑进行开发,包括 Android 平板电脑应用和匹配。1no Pain no Gain no Gavin 博客同步更新至:http:/ http:/ 一、一、Android 应用程序概述应用程序概述 1.Android 的嫡系组件的嫡系
4、组件 Android 有四项一等公民(或称为嫡系组件),包括:Activity(活动)、ContentProvider(内容提供程序)、BroadcastReceiver(广播接收器)与 Service(服务)。它们都必须宣告于 AndroidManifest.xml 档案里。Activity 活动活动 活动是最常用的 Android 应用程序形式。活动在一个称为视图(后文将介绍)的类的帮助下,为应用程序提供 UI。视图类实现各种 UI 元素,比如文本框、标签、按钮和计算平台上常见的其他 UI 元素。一个应用程序可以包含一个或多个活动。这些活动通常与应用程序中的屏幕形成一对一关系。应用程序通过
5、调用 startActivity()或 startSubActivity()方法从一个活动转移到另一个活动。如果应用程序只需“切换”到新的活动,就应该使用前一个方法。如果需要异步的调用/响应模式,就使用后一个方法。在这两种情况下,都需要通过方法的参数传递一个 intent。由操作系统负责决定哪个活动最适合满足指定的 intent(后文将介绍)。对于 Activity,关键是其生命周期的把握(后文将介绍),其次就是状态的保存和恢复(onSaveInstanceState onRestoreInstanceState),以及 Activity之间的跳转和数据传输(intent)。Activity几
6、乎承接着用户对应用程序(Application)的所有操作,Activity应该有一个窗口(Window),这个窗口是可以通过不用的主题(Theme)改变样子的。Activity 应该要注意它的生命周期(Lifecycle)、设备状态(Configuration)改变时的影响以及运行状态和数据的保存,这个在一个应用程序是否可靠和人性化上至关重要。Activity里还应该要申明一些许可(Permissions),以便使用 Android的一些软硬件功能,这些申明可以由代码或者 Manifest.xml 给出。最后,每个Activity(的入口)一定要在 Manifest 当中申明。Service
7、 服务服务 与其他多任务计算环境一样,“在后台”运行着一些应用程序,它们执行各种任务。Android 把这种应用程序称为“Service 服务”。Service 是没有界面的程序,它是所谓的服务,也叫后台程序。应该要非常注意 Service的启动(startService)和绑定(bindService)这两种开启 Service的方法之间的关系以及 Service 对应的生命周期,两种开户 Service 的方法对 Service 的生命周期效果是不同的。还有就是申明许可以及申明 Service,也是在代码内或者Manifest 内申明。BroadcastReceiver 广播接收器广播接收
8、器 2no Pain no Gain no Gavin 博客同步更新至:http:/ http:/ 广播接收器是一个应用程序组件,它接收请求并处理 intent。与服务一样,接收器在一般情况下也没有 UI 元素。广播接收器通常在 AndroidManifest.xml 文件中注册。广播接收器的类属性是负责实现这个接收器的 Java 类。广播接收并不是通常所说的无线电广播,而是指由 sendBroadcast()所发送出来的意图(Intent),即广播在这里的意思是意图,BroadcastReceiver在注册(Registe)之后可以自动监听符合预先给定的条件的意图,如果有则会通知此 Broa
9、dcastReceiver 的持有程序。ContentProvider 内容提供程序内容提供程序数据管理 内容提供程序是 Android 的数据存储抽象机制。我们以移动设备上常见的一种数据为例:地址簿或联系人数据库。地址簿包含所有联系人及其电话号码,用户在使用手机时可能需要使用这些数据。内容提供程序对数据存储的访问方法进行抽象。内容提供程序在许多方面起到数据库服务器的作用。对数据存储中数据的读写操作应该通过适当的内容提供程序传递,而不是直接访问文件或数据库。可能还有内容提供程序 的“客户机”和“实现”。ContentProvider 是作保存应用程序数据和建立维持数据库之用,以便程序重新启动时
10、回到以前的状态或者保存信息。应该注意应用程序的使用权限以及 SQL语言的使用,Android 用的是一个轻量级的数据库系统 SQLite。2.Android 生命周期生命周期 Android 程序的生命周期是由系统控制而非程序自身直接控制,这与桌面应用程序在程序自身收到关闭请求后执行一个特定的动作(比如从 main 函数中 return)而导致进程结束的思维不同。在 Android 系统中,当某个 activity调用 startActivity(myIntent)时,系统会在所有已经安装的程序中寻找其 intentfilter和 myIntent 最匹配的一个 activity,启动这个进程
11、,并把这个 intent 通知给这个 activity。这就是一个程序的“生”。在Android 中,所有的应用程序“生来就是平等的”,所以不光 Android 的核心程序甚至第三方程序也可以发出一个 intent 来启动另外一个程序中的一个 activity。Android 的这种设计非常有利于“程序部件”的重用。Android 根据其重要性在内存不足的时候移去重要性最低的进程。重要性由高到低为:1.前台进程。这样的进程拥有一个在屏幕上显示并和用户交互的 activity或者它的一个 IntentReciver正在运行。这样的程序重要性最高,只有在系统内存非常低,万不得已时才会被结束。2.可
12、见进程。在屏幕上显示,但是不在前台的程序。比如一个前台进程以对话框的形式显示在该进程前面。这样的进程也很重要,它们只有在系统没有足够内存运行所有前台进程时,才会被结束。3.服务进程。这样的进程在后台持续运行,比如后台音乐播放、后台数据上传下载等。这样的进程对用户来说一般很有用,所以只有当系统没有足够内存来维持所有的前台和可见进程时,才会被结束。3no Pain no Gain no Gavin 博客同步更新至:http:/ http:/ 4.后台进程。这样的程序拥有一个用户不可见的 activity。这样的程序在系统内存不足时,按照 LRU的顺序被结束。5.空进程。这样的进程不包含任何活动的程
13、序部件。系统可能随时关闭这类进程。从某种意义上讲,垃圾收集机制把程序员从“内存管理噩梦”中解放出来,而 Android 的进程生命周期管理机制把用户从“任务管理噩梦”中解放出来。Android 使用 Java 作为应用程序 API,并且结合其独特的生命周期管理机制同时为开发者和使用者提供最大程度的便利。Activity生命周期生命周期 Activity中常用的函数有 SetContentView()findViewById()finish()startActivity(),其生命周期涉及的函数有:void onCreate(Bundle savedInstanceState)void onSt
14、art()void onRestart()void onResume()void onPause()void onStop()void onDestroy()4no Pain no Gain no Gavin 博客同步更新至:http:/ http:/ 注意的是,Activity的使用需要在 Manifest文件中添加相应的,并设置其属性和 intent-filter。Service 生命周期生命周期 Service 可以通过 Context.startService()或 Context.bindService()创建,通过Context.stopService()、Service.stop
15、Self()、Service.stopSelfResult()或Context.unbindService()来关闭。其生命周期涉及的函数有:void onCreate()5no Pain no Gain no Gavin 博客同步更新至:http:/ http:/ void onStart(Intent intent)void onDestroy()其中 onCreate()和 onDestroy()可以被所有服务调用,无论是由Context.startService()还是 Context.bindService()发起的 Service。但是,onStart()只能被由 startSer
16、vice()发起的 Service调用。如果一个 Service 运行其它对象绑定它,需要扩展如下 callback方法:IBinder onBind(Intent intent)boolean onUnbind(Intent intent)void onRebind(Intent intent)BroadcastReceiver 生命周期生命周期 只包含一个方法:void onReceive(Context curContext,Intent broadcastMsg)包含活动的组件的 BroadcastReceiver 将不会被系统关闭,但是仅包含不活动的组件的进程将随时会背系统关闭(当其
17、它组建需要内存时)。6no Pain no Gain no Gavin 博客同步更新至:http:/ http:/ 3.Intent 简介简介Android 的创新导航与触发机制的创新导航与触发机制 前文介绍了 Android 的四项一等公民:Activity(活动)、ContentProvider(内容提供程序)、BroadcastReceiver(广播接收器)与 Service(服务)。这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的 Android 应用。在这些组件之间的通讯中,主要是由 Intent 协助完成的。Intent 是 Android 应用开发里很重要的
18、一个元件,通过 Intent 可以从一个 Activity来启动另一个任意的Activity,不管是自己定义的还是系统定义的。在 ActivityGroup(extends Activity)里面,Intent 的 flag设置对于子 Activity的启动方式至关重要。Intent 负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android 则根据此 Intent 的描述,负责找到对应的组件,将 Intent 传递给调用的组件,并完成组件的调用。因此,Intent 在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。Android 应
19、用程序框架的强大之处在于它将 Web习惯引入到移动应用程序中。这并不意味着该平台提供了一个强大的浏览器,也不仅限于使用 JavaScript 和服务器端资源,而是涉及 Android 平台的工作原理以及该平台的用户如何与移动设备交互这一核心问题。互联网的强大之处一言以蔽之,在于一切事物通过一次单击即可获得。这些单击的内容对于用户来说就是 URL(UniformResource Locator,统一资源定位符)或 URI(Uniform Resource Identifier,统一资源标识符)。有效使用 URI 可帮助用户方便快捷地访问所需的日常信息。“把链接发给我”就说明了一切。在移动设备上复
20、制桌面设备体验的平台只能吸引一小部分忠实的用户。多级菜单、多次单击在移动市场中通常都不被人所接受。移动应用程序对直观易用的要求比其他任何市场中的应用程序都要高。Intent 和 IntentFilter 将“单击”范例引入到了 Android 平台移动应用程序使用和开发的核心中。Intent 结构结构 Intent 是执行某操作的一个抽象描述,它描述了如下内容:首先,首先,要执行的动作(action)的一个简要描述,如 VIEW_ACTION(查看)、EDIT_ACTION(修改)等,Android 为我们定义了一套标准动作:MAIN_ACTION VIEW_ACTION EDIT_ACTIO
21、N PICK_ACTION GET_CONTENT_ACTION DIAL_ACTION CALL_ACTION SENDTO_ACTION 7no Pain no Gain no Gavin 博客同步更新至:http:/ http:/ ANSWER_ACTION INSERT_ACTION DELETE_ACTION RUN_ACTION LOGIN_ACTION CLEAR_CREDENTIALS_ACTION SYNC_ACTION PICK_ACTIVITY_ACTION WEB_SEARCH_ACTION 此外,我们还可以根据应用的需要,定义我们自己的动作,并可定义相应的Activi
22、ty来处理我们的自定义动作。其次,其次,执行动作要操作的数据(data),Android 中采用指向数据的一个 URI来表示,如在联系人应用中,一个指向某联系人的 URI 可能为:content:/contacts/1。这种 URI 表示,通过 ContentURI这个类来描述,具体可以参考 .ContentURI 类的文档。此外,此外,除了 action和 data这两个重要属性外,还有一些附加属性:category(类别),被执行动作的附加信息。例如 LAUNCHER_CATEGORY 表示 Intent 的接受者应该在 Launcher 中作为顶级应用出现;而ALTERNATIVE_CA
23、TEGORY表示当前的 Intent 是一系列的可选动作中的一个,这些动作可以在同一块数据上执行。type(数据类型),显式指定 Intent 的数据类型(MIME)。一般 Intent 的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。component(组件),指定 Intent的的目标组件的类名称。通常 Android 会根据 Intent 中包含的其它属性的信息,比如 action、data/type、category进行查找,最终找到一个与之匹配的目标组件。但是,如果 component 这个属性有指定的话,将直接使用它指定的组件,而
24、不再执行上述查找过程。指定了这个属性以后,Intent的其它所有属性都是可选的。extras(附加信息),是其它所有附加信息的集合。使用 extras 可以为组件提供扩展信息,比如,如果要执行“发送电子邮件”这个动作,可以将电子邮件的标题、正文等保存在 extras里,传给电子邮件发送组件。总之,总之,action、data/type、category和 extras 一起形成了一种语言。这种语言使系统能够理解诸如“查看某联系人的详细信息”之类的短语。随着应用不断的加入到系统中,它们可以添加新的 action、data/type、category来扩展这种语言。应用也可以提供自己的 Activ
25、ity来处理已经存在的这样的“短语”,从而改变这些“短语”的行为。解析解析 Intent 在应用中,我们可以以两种形式来使用 Intent:8no Pain no Gain no Gavin 博客同步更新至:http:/ http:/ 显式(直接)Intent:指定了 component 属性的 Intent(调用setComponent(ComponentName)或者 setClass(Context,Class)来指定)。通过指定具体的组件类,通知应用启动对应的组件。隐式(间接)Intent:没有指定 comonent 属性的 Intent。这些 Intent 需要包含足够的信息,这样系
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Eclipse 开发 调试 Android 应用程序
限制150内