Android的四个主要组件分别是activity、service、content provider和broadcast receiver。
一.安卓四大组件详情
1、活动
)1) Activity通常是另一个屏幕窗口)。
)2)在Activity之间通过Intent进行通信。
)3) Android APP应用程序的所有Activity都必须在AndroidManifest.xml配置文件中声明。 如果不声明,系统将不会识别或执行该Activity。
2、服务
) service用于在后台完成用户指定的操作。 服务分为两种。
a ) started )启动:当APP应用程序组件如activity )调用startService )方法启动服务时,服务将进入started状态。
b ) bound 绑定) :在调用APP组件bindService )方法绑定到服务时,服务将进入bound状态。
2) startService ) )和bindService )之间的差异:
) a ) started service 启动服务)由其他组件调用startService )方法启动,然后调用服务的onStartCommand )方法。 如果服务处于started状态,则即使启动服务的组件被销毁,其生命周期也与启动服务的组件无关,并且可以无限期在后台运行。 因此,服务必须在任务完成后通过调用stopSelf 方法停止,或者另一个组件通过调用stopService )方法停止。
b ) bindService ) )方法启用服务时,调用方与服务相关联,调用方结束时服务也将终止。 它具有“不求同时生,必须同时死”的特点。
)3)开发者必须在APP应用程序配置文件中声明所有服务并使用标签。
)4)服务组件没有图形用户界面,因为服务通常在后台运行,不需要与用户交互。 服务组件必须继承服务基类。 服务组件通常用于为其他组件提供后台服务,以及监视其他组件的运行状态。
3、内容提供商
1 ) android平台提供内容提供器,用于向其他APP应用提供一个APP应用的指定数据集。 其他APP应用程序可以通过ContentResolver类从内容提供者获取或存储数据。
)2)仅当需要在多个APP应用程序之间共享数据时才需要内容提供者。 例如,通讯簿数据用于多个APP应用程序,并且必须存储在一个内容提供者中。 其优点是统一数据访问方法。
)3)通过ContentProvider共享数据。 ContentProvider用于存储和检索数据,并将其显示在所有APP应用程序中。 这是在不同的APP应用程序之间共享数据的唯一方法。 因为android并不提供所有APP应用程序通用访问的通用商店。
)4)开发者不直接使用ContentProvider类的对象,而是经常通过ContentResolver对象来操作ContentProvider。
)5) ContentProvider使用URI唯一标识数据集。 此处的URI以content://为前缀,表示该数据由ContentProvider管理。
4、broadcast receiver
)1)你的APP应用可以用它来过滤外部事件,只有感兴趣的外部事件可以被接收和作出响应,比如当有电话呼叫或者数据网络可用时。 广播接收机没有用户界面。 但是,您可以启动activity或serice来响应收到的信息,或者使用NotificationManager通知用户。 通知可以通过多种方式吸引用户的注意力,包括背光闪烁、振动和音频播放。 通常,将永久图标放在状态栏上,以便用户可以打开它以获取消息。
2 )广播接收者的登录有程序的动态登录和向AndroidManifest文件的静态登录2种方法。
3 )动态注册广播接收器的特征在于当关闭用于注册的Activity时,还禁用广播。 静态注册不需要担心广播接收机是否关闭,如果设备打开,广播接收机也打开。 也就是说,即使APP本身没有启动,该APP订阅的广播在触发时也会作用于它。
二、安卓四大组件总结:
1)注册4大组件
所有四个基本组件都必须注册和使用,并且每个Activity、service和Content Provider都必须由AndroidManifest文件组成。 未在AndroidManifest文件中声明的activity、服务和内容提供者对系统不可见且不可用。 另一方面,broadcast receiver广播接收者的注册是通过由AndroidManifest文件构成的静态注册和根据代码动态创建并调用Context.registerReceiver )的方法进行的请注意,在AndroidManifest文件中配置的广播收件人在系统启动时始终处于活动状态,并且在接收到感兴趣的广播时会触发即使程序未运行)。
)2)激活四大组件
激活内容提供者:接收时
到ContentResolver发出的请求后,内容提供者被激活。而其它三种组件activity、服务和广播接收器被一种叫做intent的异步消息所激活。
(3)4大组件的关闭
内容提供者仅在响应ContentResolver提出请求的时候激活。而一个广播接收器仅在响应广播信息的时候激活。所以,没有必要去显式的关闭这些组件。Activity关闭:可以通过调用它的finish)方法来关闭一个activity。服务关闭:对于通过startService)方法启动的服务要调用Context.stopService)方法关闭服务,使用bindService)方法启动的服务要调用Contex.unbindService)方法关闭服务。
(4)android中的任务(activity栈)
(a)任务其实就是activity的栈,它由一个或多个Activity组成,共同完成一个完整的用户体验。栈底的是启动整个任务的Activity,栈顶的是当前运行的用户可以交互的Activity,当一个activity启动另外一个的时候,新的activity就被压入栈,并成为当前运行的activity。而前一个activity仍保持在栈之中。当用户按下BACK键的时候,当前activity出栈,而前一个恢复为当前运行的activity。栈中保存的其实是对象,栈中的Activity永远不会重排,只会压入或弹出。
(b)任务中的所有activity是作为一个整体进行移动的。整个的任务(即activity栈)可以移到前台,或退至后台。
(c)Android系统是一个多任务Multi-Task)的操作系统,可以在用手机听音乐的同时,也执行其他多个程序。每多执行一个应用程序,就会多耗费一些系统内存,当同时执行的程序过多,或是关闭的程序没有正确释放掉内存,系统就会觉得越来越慢,甚至不稳定。为了解决这个问题,Android引入了一个新的机制,即生命周期Life Cycle)。