marrco2005
Android系统的一个很重要的特点就是,一个应用程序可以复用其他应用程序的功能模块(当然前提是其他程序对外开放了该功能模块)。举个例子来说,如果你的应用程序需要显示一个图片列表,而另外一个程序对外提供了一个实现该功能的模块,那么你的程序无需再实现该功能,也无需链接那个模块,只需简单的调用那个模块即可。当你的程序调用该模块时,Android系统会启动一个该功能模块对应的程序。
当一个程序的功能模块被调用时,android系统都会创建相应的进程,实例化相关的java对象。因此,android程序与其他系统中的应用程序不同的地方就是,android应用程序并没有一个统一的类似于main的程序入点,而是由组件(components)组成的。在Android系统中,主要有4种组件:
-
Activities
- 一个 activity 组件代表了一个可以与用户进行交互的图形界面。举个例子,一个 activity 组件可以是一个菜单,也可能被用来显示带有标题的图片。一个短信程序也许会有3个 activity 组件,一个用于显示通讯录,另外一个用于编辑短信,最后一个用于浏览接收到的短信,或者用于显示程序的相关设置。尽管从用户的角度来看,这些activity是属于同一个程序的,但事实上,这些Activity彼此之间是相互独立的。在Android中,每一个 Activity 都是从 Activity 类派生出来的。
-
marrco2005
每个程序都可以拥有一个或多个 activity。当运行程序时,某个事先指定的activity会被第一个显示。当需要在 activity 之间进行切换时,需要由当前的activity主动调用API,切换到指定的activity。
-
marrco2005
每一个activity都拥有一个用于绘制的“全屏”窗口,“全屏”并不是指整个手机屏幕,通常来讲,会比手机屏幕小一些。 activity 也可以使用其他的窗口--例如弹出一个消息对话框,或者是一个菜单选择对话框
-
marrco2005
-
窗口的绘制工作都是由视图(view)来完成的,所有的视图(view)都是从 View 类派生下来的。每一个视图都负责一个窗口内的矩形区域,父视图负责管理子视图的布局。叶子视图( Leaf views, 位于派生体系最低端的视图) 负责具体的绘制工作并负责响应与用户之间的交互工作。例如,一个视图可能被用来显示图片的缩略图,当用户点击这些缩略图时,该视图可以作出相应的响应。Android 提供类型丰富的视图应该选择— 包括按钮、文本编辑框、滚动条、菜单项、复选框等等。
-
marrco2005
-
通过调用Activity.setContentView()可以将视图嵌入到activity中。
-
-
marrco2005
服务通常是在后台运行的,没有自己的用户界面。例如,一个服务可能会在用户处理其他事物的时候,在后台播放音乐,或者从互联网上下载数据,也可能执行某些运算操作,并在计算完成后,将结果发送给activity。服务都是从Service类派生下来的。
marrco2005
- 用来播放音乐的媒体播放器就是服务的一个典型例子,媒体播放器程序可能会有一个或多个avtivity,以方便用户编辑播放列表,不过,activity本身并不播放音乐。用户可能希望在播放音乐的同时,还能运行其他的程序。因此,activity应该创建一个用于在后台播放音乐的服务。
- marrco2005
- 一个应用程序和服务之间可以相互通信。当连接建立之后,应用程序就可以调用服务的接口(当然前提是服务对外提供了该接口)。对一个音乐播放服务来说,它可能会提供一个接口,以便用户可以执行播放、暂停、停止播放等操作。
- marrco2005 于Activity以及其他组件类似,服务组件也是在程序的主线程内运行的。不过,服务组件会创建线程,用来执行那些费时的操作,比如音乐播放,因此,调用服务组件不会阻塞客户端组件,详细的信息,请查看后面的 进程与线程 部分
-
Broadcast receivers
- marrco2005
- 我没有找到broadcast receiver合适的翻译。如果直译的话就是收音机,不过从上下文来理解,broadcast cast 指的是消息通知接收器。
- marrco2005
- 一个broadcast receiver组件只负责一件事情,就是接受消息通知。有很多消息通知都是系统发出的--比如,用户改变了系统的时区,用户拍摄了一张照片或者是用户更改了语言设置。应用程序也可以发出消息通知--举个例子,比如发出一个消息通知,告诉其他程序数据已经下载完了,谁想要,就过来拿吧。
- marrco2005
- 一个应用程序可以有很多个消息通知接收器(broadcast receivers),用来响应它所感兴趣的消息。所有的消息通知接收器都是从BroadcastReceiver类派生下来的。
- marrco2005
- 消息通知接收器(broadcast receivers)没有自己的界面。因此,如果需要显示接收到的消息的相关信息,就必须创建一个Activity,或者是使用NotificationManager。NotificationManager通知用户的方式有很多种,比如闪屏、震动,发出声音等等,不过最常用的还是在状态栏上显示一个图标,用户点击该图标即可查看相关的信息。
-
marrco2005
Content providers
-
marrco2005
一个数据提供者组件(Content providers)可以向其他程序提供数据。数据可以存储在文件系统中,或者是SQLLite数据库中,当然也可以是其他地方。所有的数据提供者组件(Content providers)都是从ContentProvider类派生下来的,并且需要实现相应的方法,这样就可以向其他的程序提供数据了。不过,其他的应用程序并不是直接调用数据提供者组件(Content providers)中的方法,相反,他们调用的是数据解析对象(ContentResolver object)提供的方法。一个数据解析对象(ContentResolver object)可以同任意一个content provider组件通信; 它们彼此合作,共同完成提供数据的任务。
marrco2005
在android系统中,当一个组件将要被调用时,android 系统会确保该组件所对应的程序处于运行状态,如果该程序没有启动,系统将会启动该程序。