系统简介•Android的前世今生•Android的优势•Android系统架构的前世今生•Android的诞生发展•2007.11.5Android平台发布•2008.9.22T-MobileG1上市•2009年1季度G1销售100万支•2009.3MWC华为发布Android手机•Moto,三星,LG计划2009年下半年推出Android手机•2009获得Orange,Vodafone,O2,Telefonica支持•2009进军上网本的前世今生•Nokia/Apple/Google的战争的优势•开放性•所有的应用是平等的•应用间无界限•快速方便的应用开发开放性•谷歌与开放手机联盟合作开发了Android,这个联盟由包括中国移动、摩托罗拉、高通、宏达和T-Mobile在内的30多家技术和无线应用的领军企业组成。•Android是一个真正意义上的开放性移动设备综合平台。•通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,来建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统,这样应用之间的通用性和互联性将在最大程度上得到保持。应用平等•所有的Android应用之间是完全平等的。•所有的应用都运行在一个核心的引擎上面,这个核心引擎其实就是一个虚拟机,它提供了一系列用于应用和硬件资源间进行通讯的API。•撇开这个核心引擎,Android的所有其他的东西都是”应用”。应用无界限•Android打破了应用之间的界限,比如开发人员可以把Web上的数据与本地的联系人,日历,位置信息结合起来,为用户创造全新的用户体验。快速方便的开发应用•Android平台为开发人员提供了大量的实用库和工具,开发人员可以很快速的创建自己的应用。例如在别的手机平台上要进行基于位置的应用的开发是相当的复杂的,而Android将GoogleMap集成了进来,开发人员通过简单的几行代码就可以实现一个如图16的一个地图应用,更详细的介绍可以参见第八章。开发环境•JDK安装•AndroidSDK安装以及系统设置•Eclipse安装以及ADT工具的安装应用•分析HelloAndroid•Android程序的结构•添加编辑框与按钮程序基础•Android程序的构成•应用的生命周期应用生命周期•Android引入了一个全新的机制-应用程序生命周期(LifeCycle)。•多数情况下,一个Android应用运行在一个独立的Linux进程中•应用进程的的生命周期(存活时间)不是由进程自己控制,而是由Android系统决定•影响应用生命周期的主要因素包括:该进程对于用户的重要性,以及当前系统中还剩多少可用内存。•Intent与Intentfilters•BroadcastIntentReceiver•添加新的Activity•何谓Activity:最简单的就是你可以把Activity看成一个UserInterfaceProgram,原则上它会提供使用者一个交互式的接口功能,那一个activity只有一个UI吗?非也,举例来说:一个email程序,就可能包含三个activity–邮件列表的activity–显示邮件内容的activity–写新邮件或回复邮件的activity•所有的Activity在系统里由Activity堆栈所管理,当一个新的Activity被执行后,它将会被放置到堆栈的最顶端,并且变成runningactivity,而先前的Activity原则上还是会存在于堆栈中,但它此时不会是在前景的情况,除非刚刚那个新的Activity离开。•Android使用了一个很特别的类别叫Intent,用来从一个画面跳到另一个画面。•Intent是用来描述一个程序想要作些什么事情。•在Intent的数据结构里有两个很重要的部份,一个是动作(action)及对数据产生反应(datatoactupon)。action主要的内容有MAIN(程序的进入点),VIEW,PICK,EDIT等等。data则是用URI的形示来表示。比如:想要查看一个人的联络数据时,你需要建立一个Intent,它包含了VIEW的动作(action)及指向该人数据的URI描述句。•当Intent要求做某些事情时,IntentFilter被用来描述这个activity能够做些什么事情。比如一个activity要能够显示个人联络数据,你就必需要在IntentFilter说明你要如何处理个人联络数据并用ACTION_VIEW呈现出来。•IntentFilter都会在AndroidManifest.xml清单里面声明。•当你想要写一个程序来对外部的事件做些处理时,可以使用BroadcastIntentReceiver。比如:当电话响时,有短信时。BroadcastIntentReceiver它并不能拿来显示UI画面,它必需利用NotificationManager来通知使用者他们感兴趣的事件发生了。•BroadcastIntentReceiver同样的可以在AndroidManifest.xml中声明,但你也可以用写Context.registerReceiver()程序的方式来注册你自己的BroadcastIntentReceiver。你自己的程序并不会因为BroadcastReceivers被呼叫而被它执行起来。而是当BroadcastReceiver被触发时系统会依需求来执行相对应的程序。程序可以利用Context.sendBroadcast()来发出他们自己的intentbroadcast给其它的程序。•画面的切来切去则是由resolvingintent来实现的。当你想产生新的画面时,现行的activity就使用startActivity(myIntent)。•系统会根据所有已安装的程序所定义的intentfilter来看那个程序是最适合myIntent。•当startActivity被呼叫时,resolvingIntents的处理过程是伴随而来的。resolvingintent提供我们两个好处:–让Activities可以很容易的利用Intent的方式去使用别的程序的功能。–Activities可以很容易的在任何情况下由新Activity所取代。生命周期•使用Bundle在Activity间传递数据•Log与DDMS•Activity生命周期•何谓Activity:最简单的就是你可以把Activity看成一个UserInterfaceProgram,原则上它会提供使用者一个交互式的接口功能,那一个activity只有一个UI吗?非也,举例来说:一个email程序,就可能包含三个activity–邮件列表的activity–显示邮件内容的activity–写新邮件或回复邮件的activity•所有的Activity在系统里由Activity堆栈所管理,当一个新的Activity被执行后,它将会被放置到堆栈的最顶端,并且变成runningactivity,而先前的Activity原则上还是会存在于堆栈中,但它此时不会是在前景的情况,除非刚刚那个新的Activity离开。状态•当一个Activity在屏幕的最上层时(堆栈的最顶端),它就是属于active或running的状态•如果一个Activity失去焦点(focus)但还看得到它的画面(比如:一个新的Activity画面并不是全屏幕或者它是一个半透明的情况),那失去焦点的这个Activity则处在paused的状态。像这个失去焦点的Activity它还是完全活着的,并没有消失。(活着的意思是指,Activity自已本身所有的状态及数据都还是存在的,也跟窗口管理程序w