1.Activity 可以单纯的理解为一个页面就是一个Activity。他与用户的交互息息相关,每个Activity在程序中其实是相互独立的,这样带来的好处就是,一个Activity可以被自己所在的程序调用,也可以被其他程序调用,来实现相同的功能,灵活度很高。
2.Service 完全与界面无关,只运行在后台,适合做一些耗时、远程连接这样的事情。他是被Activity启动并绑定绑定后可完成交互,但是又独立运行在后台的组件,当Activity停止活动,他仍旧可以继续运行。
3.Content provider 可以把他想象成Android程序的公共数据集。当我们使用文件系统、SQLite、网站后台来储存数据时,Content provider甚至可以允许其他程序来修改你本程序的数据。比如手机QQ用Content provider来储存联系人,它允许微信获取到联系人列表。
4.Broadcast receiver 是一个用来响应系统范围内的广播的组件,他与系统通知栏的通知是完全不同的概念。系统本身可以发起一些Broadcast receiver,比如电量低、正在充电、来电来短信等,程序也可以发起广播。一个广播可以是通知给其他程序,让其去完成相应的任务,也可以发起一个通知栏,告诉用户现在出现了一个什么样的情况。
Android系统设计的一个独特方面是,任何程序都可以启动其它程序的四大组件。 例如,如果你想让用户使用设备相机捕捉一个相片,有另外一个程序做这件事,那么你的程序将可以调用它, 而不是你自己开发一个拍照的activity。你不必从相机程序中嵌入代码或者连链接代码也不需要。取而代之地,你可以简单地启动相机程序中拍照的activity。 当拍照完成,相片就会返回给你的程序供你使用。从用户的角度,就好像相机就是你程序的一部分。
当系统启动一个组件,它其实就启动了这个程序的进程(如果这个进程还未被启动的话)并实例化这个组件所需要的类。 例如,如果你的程序启动了相机程序里的activity去拍照,这个activity实际上是运行在相机程序的进程里,而不是你自己的进程。 因此,不像其它系统里的程序,Android程序并不是单入口的(例如它没有main方法)。
由于系统把程序运行在一个个独立的进程中,并使用文件权限来限制对其它程序的访问,所以你的程序不能从其它程序中直接激活组件。 尽管如此,Android系统可以做到!激活一个其它程序的组件,你必须向系统发送一个信息,这个信息需要指定你的intent 来启动一个指定的组件。 然后系统就会为你激活这个组件。三大组件——activitie, service, 和 broadcast receiver都可被 intent异步激活。
激活组件的方法:
1.启动一个activity(或者让让它来做一些新的工作)—— startActivity(Intent) startActivityForResult(Intent)
2.启动一个service(或者给一个正在运行的service发送新的指令)—— startService(intent) bindService(intent)
3.初始化一个broadcast—— sendBroadcast() sendOrderedBroadcast() sendStickyBroadcast()
4.让content provider执行一个查询操作通过调用 ContentResolver的query() 方法
参考资料:http://www.android-doc.com/guide/components/fundamentals.html