一、四大组件:activity、service、broadcastreceiver和contenprovider
1、activity:凡是可视化的内容均这里显示
2、service:后台运行(退出应用,服务仍然继续运行)
3、broadcastreceiver:广播消息(如电话、短信、开机成功等)
4、contentprovider:为程序间共享数据,如360管家可以读取通讯录等
二、生存期
1、activity的生存期
1)onCreate() 活动创建时调用,作用类似于c++d的构造函数(仅仅个人理解,我也是刚刚开始学)
2)onStart() 不可见转可见时调用,如按返回键时候,一个新的界面从完全不可见变成可见
3)onResume()准备交互时候调用,此时活动位于栈顶,运行状态
4)onPause()切换下一界面时候调用,通常这里将消耗cpu的资源释放掉,保留关键数据
5)onStop()可见切换到不可见时候调用,和onPause的区别是,调用后,onstop不可见,onPause可见,只是失去焦点。调用对话框的例子
6)onDestroy()即将销毁,调用后为销毁状态
7)onRestart()停止状态调用这函数就变为运行状态
需要在配置文件下注册:
<activity android:name=".xxxactivity"></activity>
2、service的生存期
1)onCreate()首次启动服务时调用,注意这个函数只执行一次。由startService() 调用时创建(被其他类调用,是context中的方法)相应有stopService()结束
2)onStartCommand()每次开启都执行,重复开启不执行oncreate而是这个函数
3)onBinder()提供给外部的接口,获取其返回值即可获得服务的操作
4)onDestroy()服务销毁
当活动开启或绑定服务时候,ServiceConnection中的onServiceConnection和onServiceDisconnected方法让活动与服务建立关系
注册:
<service android:name=".xxxservice"></service>
3、broadcastreceiver的生命周期和应用
1)onReceive() 传递intent对象,被认为只有这函数调用时候是活跃的。用来接收系统或应用发来的广播,如电量不足、地域变化、来电来信等,可用来通知用户,启动活动、Notificationmanager、开启背景灯、震动设备、播放声音等
2)静态注册,程序退出自动注销
<receiver android:name=".xxxreceiver">注册动作,也就是接收什么类型的广播,在<intent -filter>里面注册<action android:name="..."/></receiver>
此时注意需要设置相应的权限,否则无法接受广播
3)动态广播:
localbroadcastmanager.registerreceiver()注册广播
localbroadcasemanager.sendbroadcast(intent)发送广播
localbroadcastmanager.unregisterreceiver()注销广播
#具体大致如下
(1)实例化一个intentfilter对象
(2)intentfilter对象添加想要接受的广播类型,用addaction()
(3)实例化一个广播接收器
(4)registerreceiver()把两个对象放进去注册,相当于告诉系统,我这个接收器是接收上面那对象的类型广播的
(5)当接收到指定类型广播时候,调用onreceive()函数
(6)最终在销毁的地方要注销注册unregisterreceiver()
注意的是,1、第二步添加类型时候根据情况申请权限。2、静态广播不需要打开应用直接可以接收,而动态广播因为要在oncreate()中执行,需要启动应用。3、静态在配置文件中注册,动态不需要在配置文件注册。静态在配置文件考虑注册和权限,动态只考虑权限。4、自定义广播考虑注册,用sendbroadcast()发送intent对象
4、contextprovider生命周期
1、onCreate()初始化,通常用来数据库创建和升级,只当contentresolver尝试访问我们程序中数据时,才初始化
2、query()查询数据。由uri指定查询的表
3、insert()添加数据,返回新纪录的uri
4、update()更新数据,uri指定的表
5、delete()删除数据,uri指定
6、gettype()根据uri返回相应的MIME
其中uri表示某个应用中某个表,可以指定到某个表的某条数据,是唯一确定的。
7、运用过程讲解
contentprovider作为内容提供器,由谁来访问?contentresolver!通过getcontentresolver()获得其对象即可对提供器的内容进行操作,主要获取内容的uri,因为他是通往提供器的桥梁。
1)urimatcher的match()方法会将刚才传来的uri判断出需要访问哪张表哪条数据,根据情况操作内容提供器里面的数据
2)MIME值分为系统部分和自定义部分,由系统识别,当系统调用gettype()方法后,获得返回值,如果系统不认识,则在查询,删除,更新等操作的uri会被认为不可信任,系统无法得知cursor是否合法,就需要再次验证,通过则操作成功,不通过则失败。验证过程需要消耗资源,所以mime值写对了就可以节省开销。
3)需要注册并申请相应权限
4)用contentresolver操作某一数据时,需要实例化contentvalue对象,添加数据到该对象,由contentresolve操作。