四大组件的运行状态

  • **概述 **

    四大组件除了BroadcastReceiver之外其他三种都必须在AndroidManifect中注册,BroadcastReceiver可以在AndroidManifect中注册也可以代码注册。调用方式上,Activity,service,BroadcastReceiver需要借助Intent,而ContentProvider无需借助Intent

  • Activity

    是一种展示型组件,是最重要的一种组件,对于用户来说Activity就是Android应用的全部,因为其他三种组件都是不可感知的。Activity主要作用是展示一个界面并和用户交互,它扮演的是一种前台界面的角色。只有一种运行模式即启动状态

  • Service

    是一种计算型组件,用于在后台执行一系列计算任务。该组件工作在后台,用户无法感知其存在。该组件有两种状态,启动状态和绑定状态。当其处于启动状态在service内部可以做一些后台计算并且无需和外界有直接的交互;当其处于绑定状态,这个时候内部依然可以进行后台计算,但这种状态下外界可以很方便的与其进行通信。Service也是可以停止的,但有些复杂需要灵活采用stopService和unBindService这俩方法才能完全停止一个Service组件

  • BroadcastReceiver

    是一种消息型组件,,用于在不同的组件之间乃至不同的应用之间传递消息,,同样无法被用户感知,因为它工作在系统内部,BroadcastReceiver也叫作广播。

    广播注册分为动态注册和静态注册。

    静态注册是指在AndroidManifest中注册,这种广播会在应用安装时被系统解析,此形式的广播无需应用启动就可以收到相应的广播。

    动态注册通过Context.registerReceiver()实现. 此种形式必须要应用启动才能注册并接收广播。

    在实际开发中通过Context的一系列send方法发送广播,发送和接收过程的匹配是通过广播接收者的来描述的。

    BroadcastReceiver可以用来实现低耦合的观察者模式,观察者和被观察者之间可以没有任何耦合,并且它不适合执行耗时操作,也没有停止的概念

  • ContentProvider

    是一种数据共享型组件,用于向其他组件乃至其他应用共享数据。它的内部需要实现增删改查四种操作,在其内部维持着一份数据集合,这个数据集合既可以通过数据库实现也可以采用其他任何类型来实现,比如List或者Map。需要注意的是,ContentProvider内部的insert,delete,update和query方法需要做好线程同步,因为这几个方法是在Binder线程池中被调用的。无需手动停止。