读书人

原创android文档翻译(二):应用程序的

发布时间: 2012-08-26 16:48:06 作者: rapoo

原创android文档翻译(2):应用程序的组件


应用程序组件


???? ?Android的一个核心特性就是一个应用程序可作为其他程序中的元素(那些允许这样的程序提供)。例如,如果你的程序需要用滚动条显示一些图片,另一个程序已经开发出了合适的功能,并且可供其他程序使用,你就可以直接调用那个程序的功能,而不是自己再开发一个。你的程序不需要包含其他程序的代码或者链接到它。而是,当有需要的时候,简单的启动那个程序的一部分功能。
?? ??为了能够实现这样的功能,系统必须能够当在需要应用程序中任何一部分的时候启动它的进程,并且实例化那部分的Java对象。为此,不像大多数其他系统中的程序,Android程序不是只有单一的进入点(例如,没有main()函数)。而是,他们拥有系统实例化和运行必须的组件。有四种类型的组件:

Activities
?? ? ???Activity为用户提供了一个可视的用户界面,例如,一个activity展示了一个用户可以选择的菜单列表或显示一些带着标题的照片。一个短信程序可能有一个activity用来显示可以发送信息的联系人,第二个activity用来向选中的联系人写消息,其他的activity用来查看以前的消息,或者更改设置。虽然它们通过聚合性很强的用户界面工作者一起,但是每个activity都独立于其他的。每一个都是?Activity?的子类。?? ??? ?一个应用程序可能只由一个activity组成,或者像刚才提到的短消息程序,它由多个组成。什么是activity,需要多少个,当然取决于应用程序和它的设计。典型的,当应用程序启动的时候,activity中的一个要首先的显示给用户。从一个activity移动到另一个,是用过当前的activity启动下一个来完成的。
?? ??? ?每个activity都有一个默认的窗口。一般的情况是,这个窗口填满屏幕,但是他也可以小于屏幕和浮动到其他窗口的上面。activity也可以用作附加的窗口——例如,一个用户调用的弹出式对话框,或者当用户选择屏幕上一个特殊的选项时一个窗口用来显示一些重要的信息。
?? ??? ?窗口中的可视内容被一系列层次的视图(view)提供——派生自View类的对象。每个视图都控制了窗口中的 一个矩形区域。父视图包含和组织子视图的布局。叶试图(位于层次中的最底部)绘制在它控制的区域,直接响应这块空间的用户动作。这样,视图就是activity与用户交互的地方。例如,当用户触动一个显示小图片的视图时,会触发一些动作。Android提供了很多现成的视图供你使用——包括按钮,文本框,滚动条,菜单项,复选框还有更多。?? ? ? ?整个视图层次通过Activity.setContentView()?方法放到activity的窗口上。?content view是视图层次上的根节点。(更多视图层次的信息请看这个文档?User Interface?)。
服务(Services)

?? ? 服务没有可视化的界面,但是可以无限的运行在后台。例如,服务可以在后台播放音乐同时用户在做着其他的事情。或者他可以通过网络获取数据或计算一些activity需要的东西。所有的服务都继承自Service类。

?? ???一个最好的例子是媒体播放器通过一个播放列表来播放歌曲。这个播放器程序或许有一个或多个activity,来允许用户选择音乐和播放它们。然而,音乐本身不能被activity处理,因为用户希望当他们离开播放器窗口去做其他的事情时,音乐仍然能够播放。为了让音乐能够继续,媒体播放器的activity可以启动一个在后台运行的服务。系统应该保证音乐服务运行,即使启动的activity窗口已经不再主屏幕上了。

?? ? 可以连接到(绑定到)进行中的服务(和开启一个已经不再运行的服务)。当连接上的时候,你可以通过服务暴露的接口和它通信。在音乐服务中,这个接口可以让用户暂停,重定位,停止,重新播放录音。?? ? 像activity和其他组件一样,服务运行在应用程序进程的主线程中。所以它们不会阻塞其他组件或用户界面,他们经常为那些比较花费时间的任务产生其他的线程(就像音乐),请看后面的进程和线程部分。?? ???
广播接收器(Broadcast receivers)
?? ??广播接收器不会主动做什么事,但是他会接受广播消息并作出响应。许多广播都来源于系统代码——例如,时区改变的通知,电池底电量,接受到一幅图片,或者用户改变了语言选项。应用程序也能发送消息——例如,让其他的程序知道一些数据已经下载到设备上并且可以使用。?? ??? 应用程序能拥有任何数量的广播接收器来响应任何消息是很重要的。所有的接收器都集成BroadcastReceiver?类。?? ? ? 广播接收器不会显示用户界面,但是它为了响应一个接受到的消息可能会启动一个activity,或者它会用 ?NotificationManager来提示用户。通知消息可以有多种方式吸引用户的注意力——闪烁背光灯,振动手机,播放声音,等等。他们一般会在状态栏一直放一个图片,用户可以打开它获得消息。
内容提供器(Content providers)
?? ??? 内容提供器能让把应用程序的数据提供给其他数据。这些数据可以是存储在文件系统中的,也可以是SQLite数据库中的或者其他形式。内容提供器继承自?ContentProvider类,实现了一系列标准的方法来让其他程序接受和存储它控制之下的数据。但是,程序不会直接调用这些方法。而是用一个?ContentResolver?对象,调用它的方法。ContentResolver 可以和任何的内容提供器通信。它和内容提供器一起来管理进程间通信。?? ??? 更多信息请看这个文档Content Providers。?? ? ? 每当一个请求要被一个特定的组件处理的时候,Android保证这个组件的进程是在运行的,如果需要的话就启动它,这个组件适当的实例是可用的,如果需要会创建这个实例。

?

触发组件:行为(intents)
?? ? ?当被ContentResolver最为作为目标时内容提供器被激活。另外三个组件——activity,服务和广播接收器,被叫做行为(intents)的异步消息驱动。行为是一个存放着消息内容的Intent对象。对于activity和服务,它命名请求的动作,指定要处理数据的URI。例如,它可能代表一个给用户显示图片的请求,或者让用户编辑一些文本。对于广播接收器,行为对象为将要传送的消息命名。例如,当摄像头按钮按下的时候,它会发送一些有用的信息。?? ??? ?有各种方法用来触发各类的组件:

读书人网 >Android

热点推荐