众所皆知,android四大组件有Activity、Service、BroadCastReceiver、ContentProvider。对于android开发来说,四大组件基本上是工作中必不可少,也是最常用到的内容。接下来我们逐个看下他们的作用。

 

1.Activity(活动)

        activity是一种展示组件,一个activity就是一个单独的屏幕,相当网站的一个页面。

        activity可以用于直接向用户展示一个界面,并且监听用户的操作并作出交互。最常见的就是注册登录页面,展示输入框等组件,并获取用户的输入进行注册或者登录操作。

        activity必须要在AndroidManifest进行注册。不然不能直接调用。

<activity
    android:name=".TestActivity"
    android:label="This is a Activity">
</activity>



       前面说activity相当于网页的一个页面,其实activity也可以以弹窗形式存在。只要在AndroidManifest注册的时候指定对话框主题即可  

<activity
    android:name=".TestActivity"
 android:theme="@android:style/Theme.Dialog"
    android:label="This is a Activity">
</activity>

        activity是可以停止的,调用 finish方法即可。

2. Service(服务)

        Service是一种计算型组件,用于在后台执行需要放在后台执行,用户无法直接感知的操作。例如在后台播放音乐。注意:service并不是专用于执行耗时操作的,因为service也是运行在主线程里面的,所以耗时操作如网络请求必须开启子线程。


       Activity 组件只有一种运行模式,即 Activity 处于启动状态,Service 组件略有不同,它有两种状态:启动状态绑定状态

  • 启动状态
    Service 内部可以做一些后台计算,并且不需要和外界有直接的交互。该运行模式可以使用 Context 的startService方法启动Service。
  • 绑定状态
    Service 内部同样可以进行后台计算,但是处于这种状态时,外界可以很方便地和 Service 组件进行通信。该运行模式使用 Context 的bindService方法启动 Service。

       Service也必须在AndroidManifest里面注册方可使用

 3.BroadCastReceiver(广播接收器)

       BroadCastReceiver是一种消息型组件,用于在不同的组件甚至不同的应用之间传递消息。 BroadcastReceiver 同样是用户无感知的,运行在系统内部。BroadCastReceiver没有停止的概念。

       BroadCastReceiver有两种注册方式:     


  • 静态注册
    在AndroidManifest里面注册。此种形式的广播不需要启动应用即可接收到相应的广播
  • 动态注册    
IntentFilter filter=new IntentFilter();
filter.addAction("com.simbazou.receiver.test");
this.registerReceiver(mReceiver,filter)

        直接在代码里面注册,必须要启动应用才能收到广播。还需要在onDestory取消注册

this.unregisterReceiver(mReceiver)

4.ContentProvider(内容提供者)

        ContentProvider是一种数据共享型组件,用于向其它组件乃至其他应用共享数据。他对于用户也是无法被感知的

        实现一个ContentProvider必须实现insert、delete、update、query四种操作,并且需要注意线程同步的问题,因为这些方法有可能被多个线程调用。

AndroidManifest上注册。


5.四大组件多进程的开启

        首先我们要先理解进程的概念,进程一般指一个执行单元,在移动设备中一般指一个应用。一个进程可以有多个线程,一般我们常用的UI主线程或者是网络子线程都是包含在进程里面的。

       Android 四大组件都可以开启多进程,需要在AndroidManifest.xml里面添加android:process=":remote'。需要注意的是,process属性的值几乎可以随便设置,不一定非得是remote

         例如

<activity
    android:name=".TestActivity"
    android:process=":remote"
    android:label="This is a Activity">
</activity>

  

应用设置多进程的好处:      

       一般来说,Android应用多进程有三个好处:

1)我们知道Android系统对每个应用进程的内存占用是有限制的,而且占用内存越大的进程,通常被系统杀死的可能性越大。让一个组件运行在单独的进程中,可以减少主进程所占用的内存,降低被系统杀死的概率.

2)如果子进程因为某种原因崩溃了,不会直接导致主程序的崩溃,可以降低我们程序的崩溃率。

3)即使主进程退出了,我们的子进程仍然可以继续工作,假设子进程是推送服务,在主进程退出的情况下,仍然能够保证用户可以收到推送消息。


应用设置多进程的缺陷:

       由于进程间的内存是不可见的,所以会带来一些缺陷:


1)Application的多次重建。

2)静态成员的失效。

3)文件共享问题。

4)断点调试问题



参考资料:《Android开发艺术探索》