Android四大组件介绍与生命周期.doc
《Android四大组件介绍与生命周期.doc》由会员分享,可在线阅读,更多相关《Android四大组件介绍与生命周期.doc(14页珍藏版)》请在咨信网上搜索。
1、Android四大基本组件介绍与生命周期Android四大基本组件分别是Activity,Service服务,Content Provider容提供者,BroadcastReceiver广播接收器。一:了解四大基本组件Activity :应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。在Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据。典型的动作类型有:M AIN(activity的门户)、VIEW、PICK、EDIT 等。而动作对应的数据则以URI 的形式进行表
2、示。例如:要查看一个人的联系方式,你需要创建一个动作类型为VIEW 的intent,以与一个表示这个人的URI。与之有关系的一个类叫IntentFilter。相对于intent 是一个有效的做某事的请求,一个intentfilter 则用于描述一个activity(或者IntentReceiver)能够操作哪些intent。一个activity 如果要显示一个人的联系方式时,需要声明一个IntentFilter,这个IntentFilter 要知道怎么去处理VIEW 动作和表示一个人的URI。IntentFilter 需要在AndroidManifest.xml 中定义。通过解析各种inten
3、t,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时,activity 将会调用startActivity(Intent myIntent)方法。然后,系统会在所有安装的应用程序中定义的IntentFilter 中查找,找到最匹配myIntent 的Intent 对应的activity。新的activity 接收到myIntent 的通知后,开始运行。当startActivity 方法被调用将触发解析myIntent 的动作,这个机制提供了两个关键好处:A、Activities 能够重复利用从其它组件中以Intent 的形式产生的一个请求;B、Activities 可以在任何时候被一个具有相
4、同IntentFilter 的新的Activity 取代。AndroidManifest文件中含有如下过滤器的Activity组件为默认启动类当程序启动时系统自动调用它BroadcastReceive广播接收器:你的应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager 来通知用户。通知可以用很多种方式来吸引用户的注意力闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并
5、获取消息。广播类型:普通广播,通过Context.sendBroadcast(Intent myIntent)发送的有序广播,通过Context.sendOrderedBroadcast(intent, receiverPermission)发送的,该方法第2个参数决定该广播的级别,级别数值是在 -1000 到 1000 之间 , 值越大 , 发送的优先级越高;广播接收者接收广播时的级别级别(可通过intentfilter中的priority进行设置设为2147483647时优先级最高),同级别接收的先后是随机的, 再到级别低的收到广播,高级别的或同级别先接收到广播的可以通过abortBroa
6、dcast()方法截断广播使其他的接收者无法收到该广播,还有其他构造函数异步广播,通过Context.sendStickyBroadcast(Intent myIntent)发送的,还有sendStickyOrderedBroadcast(intent, resultReceiver, scheduler, initialCode, initialData, initialExtras)方法,该方法具有有序广播的特性也有异步广播的特性;发送异步广播要: 权限,接收并处理完Intent后,广播依然存在,直到你调用removeStickyBroadcast(intent)主动把它去掉注意:发送广播
7、时的intent参数与Contex.startActivity()启动起来的Intent不同,前者可以被多个订阅它的广播接收器调用,后者只能被一个(Activity或service)调用监听广播Intent步骤:1写一个继承BroadCastReceiver的类,重写onReceive()方法,广播接收器仅在它执行这个方法时处于活跃状态。当onReceive()返回后,它即为失活状态,注意:为了保证用户交互过程的流畅,一些费时的操作要放到线程里,如类名SMSBroadcastReceiver2注册该广播接收者,注册有两种方法程序动态注册和AndroidManifest文件中进行静态注册(可理解
8、为系统中注册)如下:静态注册,注册的广播,下面的priority表示接收广播的级别2147483647为最高优先级动态注册,一般在Activity可交互时onResume()注册BroadcastReceiverIntentFilter intentFilter=new IntentFilter(android.provider.Telephony.SMS_RECEIVED);registerReceiver(mBatteryInfoReceiver ,intentFilter);/反注册unregisterReceiver(receiver);注意:1.生命周期只有十秒左右,如果在 onRe
9、ceive() 做超过十秒的事情,就会报ANR(Application No Response) 程序无响应的错误信息,如果需要完成一项比较耗时的工作 , 应该通过发送 Intent 给 Service, 由Service 来完成 . 这里不能使用子线程来解决 , 因为 BroadcastReceiver 的生命周期很短 , 子线程可能还没有结束BroadcastReceiver 就先结束了 .BroadcastReceiver 一旦结束 , 此时 BroadcastReceiver 的所在进程很容易在系统需要存时被优先杀死 , 因为它属于空进程 ( 没有任何活动组件的进程 ). 如果它的宿主
10、进程被杀死 , 那么正在工作的子线程也会被杀死 . 所以采用子线程来解决是不可靠的2. 动态注册广播接收器还有一个特点,就是当用来注册的Activity关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用系统常见广播Intent,如开机启动、电池电量变化、时间改变等广播Service 服务:一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多
11、个activity,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service 一直执行,直到这个service 运行结束。另外,我们还可以通过使用Context.bindService()方法,连接到一个service 上(如果这个service 还没有运行将启动它)。当连接到一个service 之后,我们还可以servic
12、e 提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。Service使用步骤如下 1继承service类 2AndroidManifast.xml配置清单文件中节点里对服务进行配置 服务不能自己运行,需要通过Contex.startService()或Contex.bindService()启动服务通过startService()方法启动的服务于调用者没有关系,即使调用者关闭了,服务仍然运行想停止服务要调用Context.stopService(),此时系统会调用onDestory(),使用此方法启动时,服务首次启动系统先调用服务的onCreate()-onSt
13、art(),如果服务已经启动再次调用只会触发onStart()方法使用bindService()启动的服务与调用者绑定,只要调用者关闭服务就终止,使用此方法启动时,服务首次启动系统先调用服务的onCreate()-onBind(),如果服务已经启动再次调用不会再触发这2个方法,调用者退出时系统会调用服务的onUnbind()-onDestory(),想主动解除绑定可使用Contex.unbindService(),系统依次调用onUnbind()-onDestory();Content Provider容提供者 :android平台提供了Content Provider使一个应用程序的指定数据
14、集提供给其他应用程序。这些数据可以存储在文件系统中、在一个SQLite数据库、或以任何其他合理的方式,其他应用可以通过ContentResolver类(见ContentProviderAccessApp例子)从该容提供者中获取或存入数据.(相当于在应用外包了一层壳),只有需要在多个应用程序间共享数据是才需要容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个容提供者中它的好处:统一数据访问方式。android系统自带的容提供者(顶级的表示数据库名,非顶级的都是表名)这些容提供者在SDK文档的android.provider Java包中都有介绍。见:developer.android
15、./reference/android/provider/package-summary.htmlBrowserCallLogContacts Groups People Phones PhotosImages ThumbnailsMediaStore Albums Artists Audio Genres PlaylistsSettingsVideoCallLog:地址和接收到的信息Contact.People.Phones:存储Setting.System:系统设置和偏好设置使用Content Provider对外共享数据的步骤1继承ContentProvider类并根据需求重写以下方法:
16、publicboolean onCreate();/处理初始化操作/* * 插入数据到容提供者(允许其他应用向你的应用中插入数据时重写) * param uri * param initialValues 插入的数据 * return*/public Uri insert(Uri uri, ContentValues initialValues);/* * 从容提供者中删除数据(允许其他应用删除你应用的数据时重写) * param uri * param selection 条件语句 * param selectionArgs 参数 * return*/publicint delete(Uri
17、 uri, String selection, String selectionArgs);/* * 更新容提供者已存在的数据(允许其他应用更新你应用的数据时重写) * param uri * param values 更新的数据 * param selection 条件语句 * param selectionArgs 参数 * return*/publicint update(Uri uri, ContentValues values, String selection, String selectionArgs);/* * 返回数据给调用者(允许其他应用从你的应用中获取数据时重写) * p
18、aram uri * param projection 列名 * param selection 条件语句 * param selectionArgs 参数 * param sortOrder 排序 * return*/public Cursor query(Uri uri, String projection, String selection, String selectionArgs, String sortOrder) ; /* * 用于返回当前Uri所代表数据的MIME类型 * 如果操作的数据为集合类型(多条数据),那么返回的类型字符串应该为vnd.android.cursor.di
19、r/开头 * 例如要得到所有person记录的Uri为content:/.bravestarr.provider.personprovider/person, *那么返回的MIME类型字符串应该为vnd.android.cursor.dir/person * 如果操作的数据为单一数据,那么返回的类型字符串应该为vnd.android.cursor.item/开头 * 例如要得到id为10的person记录的Uri为content:/.bravestarr.provider.personprovider/person/10, *那么返回的MIME类型字符串应该为vnd.android.curso
20、r.item/person * param uri */public String getType(Uri uri)这些方法中的Uri参数,得到后需要进行解析然后做对应处理,Uri表示要操作的数据,包含两部分信息: 1.需要操作的contentprovider 2.对contentprovider中的什么数据进行操作,一个Uri格式:结构头:/authorities(域名)/路径(要操作的数据,根据业务而定)说明:contentprovider的结构头已经由android规定为content:/authorities用于唯一标识这个contentprovider程序,外部调用者可以根据这个找到
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 四大 组件 介绍 生命周期
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。