一、Activity和View
Activity是Android应用中负责与用户交互的组件。
View是所有UI控件、容器控件的基类。View组件就是Android应用中用户实实在在看到的部分。
Activity为Android应用提供了可视化用户界面,如果该Android应用需要多个用户界面,那么这个Android应用就会包含多个Activity。
多个Activity组成Activity栈。当前活动的Activity位于栈顶。
展示型组件,用于向用户展示一个界面,接收用户的输入信息从而进行交互。
Activity的启动由Intent触发,可以通过finish方法来结束Activity组件的运行;
是一个前台的角色;
====================================================
二、Service
Service与Activity的地位是并列的。它也代表一个单独的Android组件。
Service与Activity的区别在于,Service通常位于后台运行,它一般不需要与用户交互。因此Service组件没有图形用户界面。
Service组件需要继承Service基类。
一个Service组件被运行起来后,它将拥有自己的独立的生命周期,Service组件通常用于为其他组件提供后台服务或者监控其他组件的运行状态。
计算型组件,用于在后台执行一系列计算型任务;
用户无法感知其存在,Service组件有两种状态:启动状态,绑定状态;
一些耗时操作仍然需要单独的现场去完成;
停止比较复杂,需要stopService和unBindService这两个方法才能完全停止一个Service组件;
======================================================
三、BroadcastReceiver
BroadcastReceiver是Android中另一个非常重要的组件。
故名思义,它表示广播消息接收器。
类似于事件编程中的监听器。
与普通时间监听器不同的是,普通事件监听器监听的事件源是程序中的对象;而BroadcastReceiver监听的事件源是Android应用中的其他组件。
开发者只需要实现自己的BroadcastReceiver子类即可。通过重写一些方法。另外有两种方式来注册系统级的“事件监听器”。
一种是Java代码中通过Context.registReceiver()方法注册BroadcastReceiver;
另一种是AndroidManifest.xml文件中使用<receiver.../>元素来完成注册。
消息型组件,用于在不同的组件乃至不同的应用之间传递消息;
同样无法被用户感知,工作在系统内部,也叫做广播;
是一种低耦合的观察者模式;一般来说不需要停止,也没有停止的概念;
广播注册:
静态注册(应用安装时就会被解析,不需要启动也会收到,AndroidManifest)、动态注册;
====================================================
四、ContentProvider
由于Android应用各自独立地运行在自己的Dalvik虚拟机实例中。
如果这些Android应用之间需要实现实时的数据交换。
这就需要安卓系统为这种跨应用的数据交换提供一个方法:也就是ContentProvider。
当用户实现自己的ContentProvider时候,需要实现一些抽象的方法。
通常要用ContentResolver来与ContentProvider来配对使用。
一个应用程序使用ContentProvider暴露自己的数据。
而另一个应用程序则使用ContentResolver来访问数据。
数据共享型组件,用于向其他组件乃至其他应用共享数据。
无法被用户感知,内部需要维持着一份数据集合,提供增删改查的操作;处理好线程同步;
===================================================
五、Intent和IntentFilter
除了前面的4大组件外,还要介绍一个对于安卓应用非常重要的东西。
它是Intent,虽然不是安卓应用的组件,但是它是用来Android应用内不同组件之间通信的载体。
Intent可以启动应用中的Activity、也可以启动一个Service组件、还可以发送一条广播消息来触发系统中的BroadcastReceiver。
Activity、Service、BroadcastReceiver三种组件之间的通信都以Intent作为载体。只是不同组件使用Intent的机制略有区别而已。
使用方法是这三个组件调用各自指定的接口,但是这些接口都有一个共同的参数就是Intent。
Intent包含了要启动或触发的目标组件的信息。
这个Intent可以分成两类:
显式Intent:明确制定需要启动或触发的组件的类名
隐式Intent:只是指定需要启动或触发的组件应满足怎样的条件;
其中对于隐式Intent而言,Android系统需要对该Intent进行解析,解析出它的条件,然后再去系统中查找与之匹配的目标组件。如果找到符合条件的组件,就启动或触发它们。
这个功能就需要靠IntentFilter来实现了。
关于Intent和IntentFilter的详细实现机制,后续再分析。