Android应用程序剖析(译)

来源:互联网 发布:网页打开手机淘宝店铺 编辑:程序博客网 时间:2024/05/23 01:16

通常由以下四个部分来构建一个完整的Android应用程序。

  • 行为             (Activity)
  • 目的接收器(Intent Receiver)
  •  服务             (Service)
  • 内容提供者 (Content Provider)

然而,并不是所有的应用程序都必须好含上面的四个部分,你的应用程序可以由上面的一个或几个来组建。
当你决定使用以上哪些组件来构建Android应用程序时,你应该将它们列在AndroidManifest.xml文件中,在这个文件中你可以声明应用程序组件以及它们的特性和要求。

行为(Activity)

行为是以上四个组件中最常用的一个。每个行为都是Activity的子类,并实现了一些独有的功能。一个行为就相当于应用程序的一个用户界面,由事件响应以及视图等组成。大多数的应用程序通常包括多个界面。例如:一个文本聊天应用程序,至少应该包含一个联系人列表界面、一个聊天(文本通讯显示)界面、一个设置界面、一个聊天记录查询界面等等。每个界面其实都可看作是一个行为。显示一个新界面就相当于生成一个对应的行为对象。在一些情况下,行为能够返回给它的上级界面一个返回值——例如一个提供给用户选择照片的行为可以返回给它的调用者用户选择了哪个照片文件。
当一个新的行为出现时,前一个行为被中断并被放入一个历史堆栈中。用户可以使用向后导航键使前一个行为重现。当一个行为不再需要时我们可以将它们移除历史堆栈。Android会为每个应用程序保留从home界面开始的历史堆栈。

目的和目的过滤器(Intent and Intent Filter)

Android通过一个被称作目的(Intent)的特殊的类来实现界面之间的跳转。一个目的(Intent)描述了一个应用程序想要做什么。它包含两个重要的数据结构动作(action)和数据(data to act upon)。动作的值包括MAIN、VIEW、PICK、EDIT等等,而数据则以URI的形式表示。例如:显示一个联系人信息界面,你可以创建一个目的,并将它的动做(action)设置成VIEW,数据(data to act upon)设置成表示这个人信息的URI。
除此之外,还有一个被称作目的过滤器(Intent Filter)的相关类。当发生一个有效的目的(Intent)请求时,目的过滤器用来描述一个行为(Activity)能够处理什么目的(Intent)。如上例中所描述,想要正常显示一个联系人的信息界面,你必须声明一个目的过滤器(Intent Filter),它说明当有联系人数据要被在界面上显示时,你知道如何处理它们。通常目的过滤器(Intent Filter)被发布到AndroidManifest.xml文件中。
从一个界面跳转到另一个界面是由resolving Intents实现的。例如:一个行为(Activity)调用startActivity(myIntent)实现向前导航。这时,系统会考察所有已经安装的应用程序的目的过滤器(Intent Filter),并从中挑选出能够匹配myIntent目的的行为(Activity)。随后,这个行为接收到目的(Intent)的通知并运行。在运行时,当startActivity被调用,resolving Intents的处理过程随之发生,它有以下两个突出的优点:

  • 行为(Activity)可以从其他组件重用功能,同时可以简化生成目的(Intent)请求。
  • 行为可以随时被一个具有等价目的过滤器(Intent Filter)的新的行为所替代。

 目的接收器(Intent Receiver)

当你想要编写代码来对外部事件做一些处理时,可以使用目的接收器(Intent Receiver)。例如:当电话铃响,或者当网络数据可用,又或当夜幕降临。目的接收器(Intent Receiver)并不显示UI界面,它是通过NotificationManager来通知用户他们感兴趣的事件的发生。目的接收器(Intent Receiver)同样可以被注册在AndroidManifest.xml文件中,同时你也可以使用如下代码来注册自己的目的接收器(Intent Receiver)Context.registerReceiver()。你的应用程序不会因为一个目的接收器(Intent Receiver)被调用而运行;当一个目的接收器被触发时,系统会根据需要来启动你的应用程序。一个应用程序可以使用Context.broadcastIntent()发送目的广播给其他的应用程序。

服务 (Service)

服务是具有长生命周期并且没有用户界面的一段代码。一个媒体播放器从播放列表中挑选歌曲并播放是服务的一个最好的例子。在一个媒体播放器应用程序中可能包含很多的行为(Activity),它们实现了用户从播放列表中选择自己喜欢的歌曲,并使用播放器播放等功能。当应用跳转到一个新的界面时,用户仍然希望音乐继续后台播放,这时音乐后台播放本身就不应该由行为(Activity)来处理了。在这种情况下,行为(Activity)应该使用Context.startService()来启动一个后台播放音乐的服务,这样即使界面跳转,音乐也会如用户所愿,继续在后台播放。系统会一直保持后台播放,直到服务停止。注意:你可以使用Context.bindService() 来连接一个服务(如果服务没有启动则启动它)。当已经连接上了一个服务,你就可以使用服务提供的外部接口来和服务通讯了。拿媒体播放服务的例子来讲,它提供的接口包括暂停、循环播放等等。

内容提供者 (Content Provider)

一个应用程序可以将它的数据保存在文件中,也可以保存在SQLite数据库中,或者其他任何可用的存储介质中。如果应用程序之间想要数据共享,那内容提供者(Content Provider)可以派上用场了。一个内容提供者(Content Provider)就是一个类,它实现了一个标准的方法集合。其他的应用程序可以使用这些方法来保存和检索被内容提供者处理过的类型数据。
更多的有关内容提供者(Content Provider)的细节,请看Accessing Content Providers。

原文:http://code.google.com/android/intro/anatomy.html

原创粉丝点击