android 4大组件是android的灵魂,每一个APP的开发必然离不开它们。

现在总的说一说他们的功能和用法:


1、Activity

应用程序中Activity就是一个屏幕的界面,你的眼睛看到的就是一个Activity。

首先启动一个Activity1 onCreate->onStart->onResume

接着跳转到Activity2    Activity1的生命周期变化:onPause->onStop

                                                 Activity2的生命周期变化:onCreate->onStart->onResume

回到Activity1    Activity2的生命周期变化 :onPause->onStop->onDestory

每次启动Activity时OnCreate只会调用一次


2、Service

Service是不可见的,运行在后台的,它是运行的主线程的,所以在Service执行时间比较长的任务时必须使用异步处理,不然会造成ANR。

Service的两种打开方式:

1.在配置文件里注册:

<service android:name="MyService1">
             <intent-filter>
                 <action android:name="XXXXXXXX"/>
             </intent-filter>
         </service>

2.启动service

启动Service有两种启动方式:Context.StartService()    Context.bindService();

现在来说说这两种启动方式的区别:

(1)StartService 的启动的生命周期是 onCreate->onStart->onStartCommand

onCreate在Service启动时只会调用一次,以后每次启动同样的Service只会调用onStart,通过 StartServce启动的Service与调用者没有关系,调用者关闭了,还会在后台运行,只有当调用 ConText.StopService时才会停止销毁 onStop->onDestory

(2)bindService启动的生命周期是 onCreate->onBind

onCreate在Service启动时只会调用一次,以后每次启动同样的Sevice只会调用onBind,通过 bindSrivice启动的Service在调用者关闭时,service也会跟着关闭。


3、BroadcastReceive(广播接收者)

我对broadcasereceive的理解是broadcasereceive是接收外部消息事件,然后根据程序的逻辑进行一些处理,如:来电、开机、Notification等等。broadcasereceive也是不可见的,但是可以启动Activity和service.

监听broadcasereceive的步骤:

1.首先写个类继承BroadCastReceiver,并实现里面的onReceive方法,在这个方法里用来判断广播的类型,从而进行相应的操作

2.注册广播接收者

(1)通过配置文件注册:


<receiver android:name=".MyReceiver" >
  		<intent-filter>
    			<action android:name="android.provider.Telephony.SMS_RECEIVED" />
  		</intent-filter>
	</receiver >


(2)在JAVA代码里注册:

IntentFilter intentFilter=new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(myReceiver ,intentFilter);


注意:

1.广播的生命周期一般只有10s左右,在广播里执行比较耗时的操作就会有可能造成ANR,如果需要完成一项比较耗时的工作 , 应该通过发送 Intent 给 Service, 由Service 来完成 . 这里不能使用子线程来解决 , 因为 broadcastReceiver 的生命周期很短 , 子线程可能还没有结束broadcastReceiver 就先结束,broadcastReceiver 一旦结束 , 此时 BroadcastReceiver 的所在进程很容易在系统需要内存时被优先杀死 , 因为它属于空进程 . 如果它的宿主进程被杀死 , 那么正在工作的子线程也会被杀死 . 所以采用子线程来解决是不可靠的

2.动态注册广播接收器还有一个特点,就是当用来注册的Activity关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用系统常见广播Intent,如开机启动、电池电量变化、时间改变等广播


4、Content Provider内容提供者

ContentProvider(内容提供者)是Android中的四大组件之一。主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对指定应用中的数据进行操作。ContentProvider分为系统的和自定义的,系统的也就是例如联系人,图片等数据。

  1.android中对数据操作包含有:
  file, sqlite, Preferences, ContectResolver与ContentProvider前三种数据操作方式都只是针对本应用内数据,程序不能通过这三种方法去操作别的应用内的数据。android中提供ContectResolver与ContentProvider来操作别的应用程序的数据。

  2.使用方式:
  一个应用实现ContentProvider来提供内容给别的应用来操作,
  一个应用通过ContentResolver来操作别的应用数据,当然在自己的应用中也可以