Android程序的解剖
* Activity,即活动
* Broadcast Intent Receiver,即广播接收器
* Service,即服务
* Content Provider,即内容提供商
并不是每个程序都需要所有的这四个组件,但是你的程序将会使用这四个方面的某些部分组合而成。
一旦你已经决定你的应用程序需要的组件,你应该在AndroidManifest.xml文件中列举出来。AndroidManifest.xml是一个XML文件,你在其中声明你的程序的组件以及他们的能力和需求。请阅读“Android manifest file documentation”以了解更详细的资料。
Activity
活动(Activity)是Android生成块的最常用组件。一个活动通常是程序中的一个单一的屏幕。每个活动作为Activity基类的单个的继承类来实现。你的类将会显示一个UI,这个UI由Views(视图)以及对应的事件(event)组成。大多数程序由多个界面组成。例如,一个文本消息程序可能有一个展示发送消息目标的通讯录列表的界面,以及一个写消息到选中的通讯录的界面,还有查询旧消息或者修改设置的其他界面。这些界面的每一个都会被作为一个活动实现。移动到另外一个界面通过启动一个新的活动来完成。一些情况下,一个活动可能返回一个值给上一个活动——例如:一个让用户挑选图片的活动将会返回所选图片给呼叫者。
当一个新界面打开时,前一个界面暂停,放入一个历史堆栈中。用户能回退到历史堆栈中的前一个打开的界面。当不适合保留的时候,界面能从历史堆栈中选出来删除。Android为每个程序从主界面开始的所有界面保留历史堆栈。
Intent(计划)和计划过滤
Android使用一个特殊类调用Intent来从一个屏幕移动到另外一个界面。一个Intent描述了一个应用程序想做什么。intent数据结构的两个最重要部分是动作以及起作用的数据。动作的典型是MAIN(应用程序的入口)、VIEW、PICK、EDIT等。数据表达为一个URI。例如,为了浏览个人的通讯录信息,你会创建一个intent,该intent携带VIEW动作以及描述那个人的URI指向的数据。
有一个相关类称为IntentFilter。当意图(intent)是做什么事情的有效请求时,intent filter是说明活动(或者BroadcastReceiver)能处理的意图(intent),能显示个人通信录信息的活动将会发布一个IntentFilter,以说明活动知道当应用数据描述一个人时怎么处理动作VIEW。活动在AndroidManifest.xml文件中发布他们的IntentFilter。
从一个界面导航切换到另外一个界面是通过解析intent来完成的。为了向前导航,活动调用startActivity(myIntent)。然后系统搜索所有已安装程序的intent filter(意图过滤器),选择intent filter和myIntent最匹配的活动。新活动接到intent的通知,从而导致他启动。解析intent过程发生在运行时,此时startActivity被调用,提供了两个关键好处:
* 活动对于其他组件可以功能重用,只需简单的以Intent的形式发出请求。
* 活动能在任何时候被携带同等的IntentFilter的新活动替换。
广播接收器
当你想程序的代码用于外部事件的反馈时,你可以使用BroadcastReceiver,例如,电话铃声响时,或者,数据网络可获得时,或者午夜时分。BroadcstReceivers不显示UI,尽管他们可以使用NotificationManager来警告用户其感兴趣的事情是否已经发生。BroadcastReceivers在AndroidManifest.xml中注册,但是你也能使用Context.registerReceiver()从代码中注册。你的程序不一定在运行,因为BroadcastReceiver被调用;系统将会启动你的程序,如果必要的话,当BroadcastReceiver被触发的时候。程序也能通过Context.sendBroadcst()发送他们自己的intent广播到其他应用程序。
服务
服务是长期存活的没有UI运行的代码。好例子是从播放列表播放歌曲的媒体播放器。在媒体播放程序中,可能有一到多个活动供用户选择歌曲并开始播放。但是,音乐回放自己不应该被一个活动处理,因为用户希望音乐继续播放即使切换到一个新的界面。这种情况下,媒体播放器活动可使用Context.startService()启动一个后台运行的服务来保持音乐播放。然后,系统会继续运行音乐回放服务直到音乐播放完成。你可以通过阅读“Life Cycle of an Android Application”来了解系统服务的优先级。注意:你可以连接到服务(如果没有运行就启动它),使用方法Context.bindService()。当连接到服务时,你能通过服务暴露的接口和服务通信。对于音乐服务,这可能允许你暂停、重放等。
内容提供者
程序能保存数据到文件,一个SQLite数据库,或者,合理的其他任何机制。但是,内容提供者是有用的,如果你想你的程序的数据和其他程序共享。内容提供者是一个类,实现一个标准方法集,以便其他程序存取内容提供者能处理的的数据类型。
To get more details on content providers, see Accessing Content Providers.
为了了解内容提供者的详细情况,请参见“ Accessing Content Providers”
没有评论:
发表评论