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来操作别的应用数据,当然在自己的应用中也可以