Android 开发的四大组件分别是:

活动(activity):用于表现功能;

服务(service):后台运行服务,不提供界面呈现;

广播接受者(Broadcast Receive):用于接收广播;

内容提供者(Content Provider):支持多个应用中存储和读取数据,相当于数据库。

目录

1.活动(activity)

2.服务

3.广播接收器

4.内容提供器


1.活动(activity)

(1)一个Activity通常就是一个单独的屏幕(窗口)。  

(2)Activity之间通过Intent进行通信。  

(3)通过Transition类型设置Activity切换的过渡动画

(4)每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。

activity是所有程序的根本,所有程序的流程都运行在activity之中,是android当中最基本的模块之一。

activity一般代表手机屏幕的一屏。如果把手机比作一个浏览器,那么activity就相当于一个网页。

在activity当中可以添加一些Button、Checkbox等控件,可以看到activity概念和网页的概念相当类似。

一般一个android应用是由多个activity组成的,这多个activity之间可以进行相互跳转。

当打开一个新的屏幕时,之前一个屏幕会被置为暂停状态,并且压入历史堆栈中。用户可以通过回退操作返回到以前打开过的屏幕。可以选择性的一处一些没有必要保留的屏幕,因为Android会把每个应用的开始到当前的每个屏幕保存在堆栈中。

2.服务

(1)service用于在后台完成用户指定的操作。service分为两种:

started(启动):当应用程序组件(如activity)调用startService()方法启动服务时,服务处于started状态。

bound(绑定):当应用程序组件调用bindService()方法绑定到服务时,服务处于bound状态。

(2)startService()与bindService()区别:

started service(启动服务):是由其他组件调用startService()方法启动的,其生命周期与启动它的组件无关,并且可以在后台无限期运行,即使启动服务的组件已经被销毁。因此,服务需要在完成任务后调用stopSelf()方法停止,或者由其他组件调用stopService()方法停止。注意,多次调用starService不会被嵌套,所以无论同一个服务被启动多少次,一旦调用stopService或者StopSelf,都会被停止。

使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。

(3)开发人员需要在应用程序配置文件中声明全部的service,使用<service></service>标签。

(4)Service通常位于后台运行,它一般不需要与用户交互,是没有界面长生命周期的代码,因此Service组件没有图形用户界面。

Service组件需要继承Service基类。Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。

例子:打开一个音乐播放器的程序,这时如果想上网,那么打开Android浏览器,这时虽然已经进入浏览器这个程序,但是歌曲播放并没有停止,而是在后台继续一首接一首的播放,其实这个播放就是由播放音乐的Service进行控制。

3.广播接收器

(1)使用它对外部事件进行过滤,只对感兴趣的外部事件进行接收并做出响应。

广播接收器没有用户界面。也可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。

(2)广播接收者的注册有两种方法,分别是程序动态注册和AndroidManifest文件中进行静态注册。

动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。

静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。

4.内容提供器

在Android中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件等内容,都是不允许其他直接访问的。当然Android不会真的把每一个应用都做成一座“孤岛”,它为所有应用都准备可一扇窗,这就是Content Provider。应用想对外提供的数据,可以通过派生Content Provider类,封装成一枚Content Provider。每个Content Provider都用一个uri作为独立的标识,形如:content://com.xxxxx。

(1)Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。

(2)只有需要在多个应用程序间共享数据是才需要内容提供者。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。

(3)一般不直接使用ContentProvider类的对象,大多数是通过ContentResolver对象实现对ContentProvider的操作。

(4)ContentProvider使用URI来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由ContentProvider来管理

内容提供者(Content Provider)是Android提供的第三方应用数据的访问方案。