在一个Android 应用中有如下的四U组Ӟ
* Activity zdlg
* Intent Receiver 接受处理lg
* Service 服务lg
* Content Provider 内容提供lg
一个Android 应用q不需要同时具有这四个lgQ应用可以组合这些组件?/p>
在应用中一旦决定用了哪些lgQ就需要在AndroidManifest.xml文g中列丑և来?br />
Activity
Activities是最普遍的组Ӟ在应用中通常用于昄一个屏q(面Q的内容Q仅仅一个屏q(面Q的内容。开发h员需要从Activity?cȝ承下来,理UI昄和UI的反馈事件。大多数应用E序都会有多个屏q(面Q的内容Q如一个文本消息的应用E序Q第一个页面要昄联系人列表,W二 个页面要写东西给选定的联pMhQ其他页面显C旧的文本内Ҏ者其他等{。每一个页面都被当做一个ActivityQ活动组ӞQ移动到其他面意味着开?了一个新的ActivityQ活动组Ӟ。在某些场景下,一个Activity可以q回值给前一个ActivityQ如一个页面选择了一张图片,可以q回 q张囄l调用者(ActivitQ?/p>
打开新的面Ӟ前一个页面将会暂停,攄C个历史堆栈中Q用户可以用后退键浏览前面的面Q页面也可以从堆栈中删除。Android会ؓ每一个从主页面home screenQidle界面Q)启动的应用维护一个历史堆栈列表?/p>
Intent and Intent Filters
Android使用一个叫Intent的类从一个页面移动到另外一个页面。一个Intent描述了应用将要做的事情,是一U动作行为。最重要的有两点Q?动作的类型和动作所捎带的参敎ͼ数据Q,典型的动作类型ؓMAINQactivity的正门)QVIEW, PICK, EDIT{等。参数数据以URI形式来表C。例如,Z查看一个h的联pM息,需要创Z个IntentQ动作类型ؓVIEWQh名ؓ参数数据Q需要格?化ؓURIQ?/p>
一个ActivityZ表明能够处理某些IntentQAndroid设计了一个相关的cIntentFilterQActivity?IntentFilter中决定它能够处理的Intent动作cdQIntentFilter需要在AndroidManifest.xml文g中进行声 明?/p>
从一个页面到另外一个页面蟩转的依据在于发出的IntentQؓ了向前浏览,Activity调用startActivity(myIntent). Androidpȝ在所有安装的应用E序中查找intent filtersQ找出最能够匚wmyIntent的Activity。新的activity被启动Qintent被传入。有如下两个关键点:
* Activities 能够重新被?br />
* Activities 在Q何时候都可以被替换,只要一个Activity讄了相同的IntentFilter
Intent Receiver
在应用程序中Q针对外部事仉要执行一些动作来反馈Q可以用IntentReceivercR例如:来了一个电话,或者数据通道可用Q或者晚上到了?Intent Receiver没有UI的显C,管可以通过NotificationManager 通知用户某些有趣的事情发生了。Intent Receivers也需要在AndroidManifest.xml中进行声明,当然也可以在E序中调?Context.registerReceiver()接口动态声明。同时在应用E序没有跑v来的时候也能够调用Intent ReceiversQ当一个Intent Receivers被触发时QAndroidpȝ会启动q个应用E序。应用程序也能够通过Context.broadcastIntent()q播他们 的Intent?/p>
Service
一个Service是没有UIQ一直运行在后台的代码组件。一个好的例子:播放器从一个播攑ֈ表中播放歌曲。在一个播攑֙应用中,大概会有一个或多个 Activitylg允许用户选择歌曲和播攑֮们,歌曲播放代码不应该放在Activitylg中,因ؓ我们希望一直能够听歌,甚至切换C其他面。所 以,播放器页面应该启动一个服务组ӞContext.startService()Q来播放歌曲。Androidpȝ会保持serviceq行直到?l束Q可以参?#8220;Android 应用的生命周?#8221;一文)。可以用Context.bindService()接口q接上一个服务(如果q时候服务没有启动,q接会导致服务启动)Q连?上之后,可以和服务q行通讯。像播放器的例子Q可以允许暂停,重绕{等?/p>
Content Provider
应用E序可以在文件中Q数据库或者其他设备存储他们的数据。Content Provider用于各个应用程序的数据q行׃nQContent Provider是一个类Q执行一套标准的ҎQ让其他的应用程序存储和获取Content Provider所处理的数?br />
转蝲自:http://blog.csdn.net/lixinye0123/archive/2008/04/16/2296916.aspx
1、Application是在framework的基上开发的各种应用?br />
包括email客户端,SMS短消息程序,日历Q地图,览器,联系人管理程序等。所有的应用E序都是使用JAVA语言~写?br />
2、Application Framework(应用E序框架)
Framework是android为应用开发者设计的一套Y件框Ӟ提供了丰富的api和一些现成的开发元素。Framework是采用java语言实现的。在NDK出来之前Qandroid应用开发者基本上只能用java来开发应用?br />
Android使用JNIq接了libraries和framework?br />
在每个应用后面的是一pd的服务和pȝ, 其中包括;
* 丰富而又可扩展的视图(Views)Q可以用来构建应用程序, 它包括列?lists)Q网?grids)Q文本框(text boxes)Q按?buttons)Q?甚至可嵌入的web览器?br />
* 内容提供?Content Providers)使得应用E序可以讉K另一个应用程序的数据(如联pMh数据?Q?或者共享它们自q数据
* 资源理?Resource Manager)提供 非代码资源的讉KQ如本地字符Ԍ囑ŞQ和布局文g( layout files )?br />
* 通知理?(Notification Manager) 使得应用E序可以在状态栏中显C定义的提CZ息?br />
* zd理? Activity Manager) 用来理应用E序生命周期q提供常用的D回退功能
3、Libraries(pȝq行?
包含了核心库、第三方库和android虚拟机。androidq没有直接采用传l的j2se或j2me的java虚拟机,而是自己建立了一个称为dalvik的虚拟机Q号U更节省字节码的I间Q性能更好?/p>
1)E序?br />
Android 包含一些C/C++库,q些库能被Androidpȝ中不同的lg使用。它们通过 Android 应用E序框架为开发者提供服务。以下是一些核心库Q?br />
* pȝ C ?- 一个从 BSD l承来的标准 C pȝ函数? libc )Q?它是专门为基?embedded linux 的设备定制的?br />
* 媒体?- Z PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回攑֒录制Q同时支持静态图像文件。编码格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG ?br />
* Surface Manager - ҎC子pȝ的管理,q且为多个应用程序提 供了2D?D囑ֱ的无~融合?br />
* LibWebCore - 一个最新的web览器引擎用Q支持Android览器和一个可嵌入的web视图?br />
* SGL - 底层?D囑Ş引擎
* 3D libraries - ZOpenGL ES 1.0 APIs实现;该库可以使用g 3D加?如果可用)或者用高度优化的3D软加速?br />
* FreeType -位图(bitmap)和矢?vector)字体昄?br />
* SQLite - 一个对于所有应用程序可用,功能强劲的轻型关pd数据库引擎?br />
2)Android q行?br />
Android 包括了一个核心库Q该核心库提供了JAVA~程语言核心库的大多数功能?br />
每一个Android应用E序都在它自qq程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同旉效地q行多个虚拟pȝ?Dalvik虚拟机执?.dex)的Dalvik可执行文Ӟ该格式文仉对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的c都l由JAVA~译器编译,然后通过SDK??"dx" 工具转化?dex格式p拟机执行?br />
Dalvik虚拟Z赖于linux内核的一些功能,比如U程机制和底层内存管理机?/p>
4.、Linux Kernel(Linux 内核)
Android 的核心系l服务依赖于 Linux 2.6 内核Q如安全性,内存理Q进E管理, |络协议栈和驱动模型?Linux 内核也同时作为硬件和软g栈之间的抽象?/p>