作者:empty 出版社:empty |
And r old用程序使用Java做为开发语言, aapt工具把编译后的Java代码连同其它应用程序需要的数和资源文件一起打包到一个Android包文件中, 这个文件使用.a pk做为扩展名, 它是分发应用程序并安装到移动设各的媒介, 用户只需下载并安装此文件到他们的设备, 单一.a pk文件中的所有代码被认为是一个应用程序,从很多方面来看, 每个Android应用程序都存在于它自己的世界之中:
默认情况下, 每个应用程序均运行于它自己的Linux进程中, 当应用程序中的任意代码升始执行时, Android启动一个进程、而当不再需要此进程而其它应用程序又需要系统资源时, 则关闭这个进程,每个进程都运行于自己的Java声拟机(VM) 中。所以应用程序代码实际上与其它应用程序的代码是隔绝的,默认情况下, 每个应用程序均被赋予一个唯一的Linux用户ID, 井加以权限设置, 使得应用程序的文件仅对这个用户、这个应用程序可见。肖然,也有其它的方法使得这些文件同样能为别的应用程序所访问,使两个应用程序共有同一个用户ID是可行的,这种情况下他们可以看到彼此的文件,从系统资源维护的角度来看, 拥有同一个ID的应用程序也将在运行时使用同一个Linux进程, 以及同一个桌拟机。应用程序组件And rod的核心功能之一就是一个应用程序可以使用其它应用程序的元素(如果那个应用程序允许的话》。比如说,如果你的应用程序需要一个片卷动列表,而另一个应用程序已经开发了一个合用的而又允许别人使用的话,你可以真接调用那个卷动列表来充成工作,而不用白已再开发一个。你的应用程序井没有吸纳或链接其它应用程序的代码,它只是在有需求的时候启动了其它应用程序的那个功能部分。为达到这个目的, 系统必须在一个应用程序的部分被需要时启动这个应用程序, 并将那个部分的Java对象实例化, 与在其它系统上的应用程序不同, Android应用程序没有为应用准备个单独的程序入(比如说, 没有main() 方法) , 面是为系统依照雷求实例化提供了基本的组性。共有四种组骨类型:ActivityActivity是为用户操萨而展示的可现化用户界面。比如说。一个activity可以展示一个单项列表供用户选择,或者显示一些包含说明的照片。一个短消息应用程序可以包括一个用于显示做为发送对象的联系人的列表的activity, 一个给选定的联系人写短信的activity以及翻阅以前的短信和改变设置的activity,尽管它们一起组成了一个内聚的用户界面, 但其中每个activity都与其它的保持独立, 每个都是以Activity类为基类的子类实现,一个应用程序可以只有一个activity, 或者, 如别才提到的短信应用程序那样, 包含很多个。每个activity的作用,以及其数,自然取决于应用程序及其设计。一般情况下,总有一个应用程序被标记为用户在应用程序启动的时候第一个看到的.从一个activity转向另一个的方式是靠当前的activity启动下一个,每个activity不披给一个默认的窗以进行绘制、一般情况下, 这个窗是满屏的, 但它也可以是一个小的位于其它窗之上的浮动窗, 一个activity也可以使用超过一个的窗一比如, 在activity运行过程中弹出的一个供用广反应的小对话框,或是当用户选择了屏幕上特定项目后显示的必要信息。窗显示的可视内容是血一系列视图构成的, 这些视图均维承白View基类, 每个视图均控制若窗门中一块特定的超形空间,父级视图包含并组织它子视图的布局。叶节点视图《位丁视图层次最底端)在它们控制的矩形中进行绘制, 并对用户对其直接操作做出响应。所以, 视图是activity与用户进行交互的界面。比如说, 视图可以显示一个小图片, 井在用户指点它的时候产生动作。Android有很多既定的视图供用户直接使用,包括按钮、文本域、卷轴、菜单项、复选框等等。视图层次是由Act vity, set Content View() 方法放入activity的窗之中的。上下文规图是位于视图层次根位置的视图对象:(参见用产界面章节取关于视图及层次的更多信息,)服务服务没有可视化的用户界面,而是在一段时间内在后台运行。比如说,一个服务可以在用户做其它事情的时候在后台插放背景音乐、从网络上获取一些数据或者计算一些东西并提供给需要这个运算结果的activity使用。每个服务继承自Service基类。一个媒体播放器播放播放列表中的目是一个不错的例子。播放器应用程序可能有一个或多个activity来给用户选择歌曲并进行播放。然面, 音乐播放这个任务木身不应该为任何activity所处理, 因为用户望在他们离开播放器应用程序面开始做别的事情时,音乐仍在维续播放。为达到这个目的,媒体播放器activity应该启用一个运行于后台的服务, 而系统将在这个activity不再显示丁屏幕之后, 仍维持音乐播放服务的运行,你可以连接至(绵定)一个正在运行的服务(如果服务没有运行,则启动之)。连接之后,你可以通过那个服务露出来的接与服务进行通讯,对于音乐服务来说,这个接可以允许用户停、国退、停止以及重新开始播放,如同activity和其它组件样, 服务运行于应用程序进程的主线程内, 所以它不会对其它组件或用户界面有任何下扰,它们般会派生个新线程来进行些耗时任务(比如音乐回放).参见下述进程和线程.广播接收器广播收器是一个专注于按收广播知息,并做出对应处理的组件。很多广播是源自于系统代码的一比如,通知时区改变,电池电量低,拍摄了一张照片或者用户改变了语言选项。应用程序也可以进行广播一比如说,通知其它应用程序一些数据下载完成并处于可用状态。应用程序可以拥有任意数量的广播接收器以对所有它感兴趣的通知信息予以响应。所有的接收器均继承自Broadcast Receiver基类。广播接收器没有用户界面, 然面, 它们可以启动一个activity来响应它们收到的信息, 或者用Not ii cation Manager来通知用户, 通知可以用很多种方式来吸引用户的注意力—闪动背灯、震动、播放声音等等,一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。内容提供者内容是供者将一些特定的应用程序数据供给其它应用程序使用, 数据可以存储于文件系统、SQLite数据库或其它方式。内容提供者承丁Content Provider基类, 为其它应用程序取用和存储它管理的数据实现了一套标准方法、然而, 应用程序并不真按调用这些方法, 而是使用一个Content Resolver对象, 调用
它的方法作为代.Content Resolver可以与任意内容提供者进行会话.与其合作来对所右相关交互通讯进行管理。参阅独立的内容提供者章节得更多关于使用内容提供者的内容。每当出现一个需要被特定组件处理的请求时, And r old会确保那个组件的应用程序进程处于运行状态, 或在必要的时候启动它,并确保那个相应组件的实例的存在,必要时会创建那个实例。激活组件:intent当接收到Content Resolver发出的请求后, 内容提供者被激活。而其它三种组件—-activity, 服务和广插接收器被一种叫做intent的异步消总所激活、intent是一个保存着消总内的Intent对象。对于activity和服务来说, 它指明了请求的操作名称以及作为操作对象的数据的URI和其它一些信息.比如说,它可以承载对一个activity的请求, 让它为用户显示一张图片, 或者让用户编辑一些文木, 而对T厂插按收器面言, Intent对象指明了声明的行为.比如, 它可以对所有感兴趣的对象声明照相按钮被按下。对于每种组件来说,激活的方法是不同的:了解更多intent消息的信息, 请参侧狼立章节Intent和Intent滤过器。关闭组件内容提供者仅在响应Content Resolver提出请求的时候激活。而一个广播接收器仅在响应广播信息的时候激活。所以,没有必要去显式的关闭这些组件。面activity则不同, 它提供了用户界面。并与用户进行会话。所以只要会话依然特续, 哪怕对话过程暂时停顿, 它都会一直保共激活状态, 与此相似, 服务也会在很长一段时间内保持运行, 所以Android为关闭activity和服务提供了一系列的方法,系统也会在组件不再被使用的时候或者Android需要为活动组件声明更多内存的时候关闭它。后而的班件的生命周期一节,将对这种可能及附属情况进行更详细的讨论、manifest文件当Android启动一个应用程序组件之前, 它必须知道那个组件是存在的。所以, 应用程序会在一个manifest文件中声明它的组件, 这个文件会被打包到Android包中, 这个a pk文件还将涵括应用程序的代码, 文件以及其它货源,这个manifest文件以XML作为结构格式, 而且对于所有应用程序, 都叫做Android Manifest.xml.为声明一个应用程序组件,它还会做很多额外工作,比如指明应用程序所雷链接到的库的名称《除了默认的Android库之外) 以及声明应用程序期望获得的各种权限。