资源预览内容
第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
第9页 / 共19页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Android 基础之四大基本组件介绍与生命周期Android 四大基本组件分别是 Activity,Service 服务,Content Provider 内容提供者,BroadcastReceiver 广播接收器。一:了解四大基本组件Activity :应用程序中,一个 Activity 通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity 之间通过 Intent 进行通信。在 Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据。典型的动作类型有:M AIN(activity 的门户)、VIEW、PICK、EDIT 等。而动作对应的数据则以 URI 的形式进行表示。例如:要查看一个人的联系方式,你需要创建一个动作类型为 VIEW 的 intent,以及一个表示这个人的 URI。与之有关系的一个类叫 IntentFilter。相对于 intent 是一个有效的做某事的请求,一个 intentfilter 则用于描述一个 activity(或者 IntentReceiver)能够操作哪些intent。一个 activity 如果要显示一个人的联系方式时,需要声明一个IntentFilter,这个 IntentFilter 要知道怎么去处理 VIEW 动作和表示一个人的URI。IntentFilter 需要在 AndroidManifest.xml 中定义。通过解析各种 intent,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时,activity 将会调用startActivity(Intent myIntent)方法。然后,系统会在所有安装的应用程序中定义的IntentFilter 中查找,找到最匹配 myIntent 的 Intent 对应的 activity。新的 activity 接收到 myIntent 的通知后,开始运行。当 startActivity 方法被调用将触发解析myIntent 的动作,这个机制提供了两个关键好处:A、Activities 能够重复利用从其它组件中以 Intent 的形式产生的一个请求;B、Activities 可以在任何时候被一个具有相同 IntentFilter 的新的 Activity 取代。AndroidManifest 文件中含有如下过滤器的 Activity 组件为默认启动类当程序启动时系统自动调用它BroadcastReceive 广播接收器广播接收器:你的应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个 activity 或 serice 来响应它们收到的信息,或者用NotificationManager 来通知用户。通知可以用很多种方式来吸引用户的注意力闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。广播类型:普通广播,通过 Context.sendBroadcast(Intent myIntent)发送的有序广播,通过 Context.sendOrderedBroadcast(intent, receiverPermission)发送的,该方法第 2 个参数决定该广播的级别,级别数值是在 -1000 到 1000 之间 , 值越大 , 发送的优先级越高;广播接收者接收广播时的级别级别(可通过intentfilter 中的 priority 进行设置设为 2147483647 时优先级最高),同级别接收的先后是随机的, 再到级别低的收到广播,高级别的或同级别先接收到广播的可以通过 abortBroadcast()方法截断广播使其他的接收者无法收到该广播,还有其他构造函数异步广播,通过 Context.sendStickyBroadcast(Intent myIntent)发送的,还有sendStickyOrderedBroadcast(intent, resultReceiver, scheduler, initialCode, initialData, initialExtras)方法,该方法具有有序广播的特性也有异步广播的特性;发送异步广播要: 权限,接收并处理完 Intent 后,广播依然存在,直到你调用 removeStickyBroadcast(intent)主动把它去掉注意:发送广播时的 intent 参数与 Contex.startActivity()启动起来的 Intent 不同,前者可以被多个订阅它的广播接收器调用,后者只能被一个(Activity 或 service)调用监听广播 Intent 步骤:1 写一个继承 BroadCastReceiver 的类,重写 onReceive()方法,广播接收器仅在它执行这个方法时处于活跃状态。当 onReceive()返回后,它即为失活状态,注意:为了保证用户交互过程的流畅,一些费时的操作要放到线程里,如类名SMSBroadcastReceiver2 注册该广播接收者,注册有两种方法程序动态注册和 AndroidManifest 文件中进行静态注册(可理解为系统中注册)如下:静态注册,注册的广播,下面的 priority 表示接收广播的级别“2147483647“为最高优先级动态注册,一般在 Activity 可交互时 onResume()内注册 BroadcastReceiverIntentFilter intentFilter=new IntentFilter(“android.provider.Telephony.SMS_RECEIVED“);registerReceiver(mBatteryInfoReceiver ,intentFilter);/反注册unregisterReceiver(receiver);注意:1.生命周期只有十秒左右,如果在2. 动态注册广播接收器还有一个特点,就是当用来注册的 Activity 关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕 app 本身未启动,该 app 订阅的广播在触发时也会对它起作用系统常见广播 Intent,如开机启动、电池电量变化、时间改变等广播Service 服务服务:一个 Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个 activity,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的 activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个 activity 会使用Context.startService()来启动一个 service,从而可以在后台保持音乐的播放。同时,系统也将保持这个 service 一直执行,直到这个 service 运行结束。另外,我们还可以通过使用 Context.bindService()方法,连接到一个 service 上(如果这个service 还没有运行将启动它)。当连接到一个 service 之后,我们还可以 service 提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。Service 使用步骤如下1继承 service 类2AndroidManifast.xml 配置清单文件中节点里对服务进行配置服务不能自己运行,需要通过 Contex.startService()或 Contex.bindService()启动服务通过 startService()方法启动的服务于调用者没有关系,即使调用者关闭了,服务仍然运行想停止服务要调用 Context.stopService(),此时系统会调用 onDestory(),使用此方法启动时,服务首次启动系统先调用服务的 onCreate()onStart(),如果服务已经启动再次调用只会触发 onStart()方法使用 bindService()启动的服务与调用者绑定,只要调用者关闭服务就终止,使用此方法启动时,服务首次启动系统先调用服务的 onCreate()onBind(),如果服务已经启动再次调用不会再触发这 2 个方法,调用者退出时系统会调用服务的 onUnbind()onDestory(),想主动解除绑定可使用 Contex.unbindService(),系统依次调用onUnbind()onDestory();Content Provider 内容提供者内容提供者 :android 平台提供了 Content Provider 使一个应用程序的指定数据集提供给其他应用程序。这些数据可以存储在文件系统中、在一个 SQLite 数据库、或以任何其他合理的方式,其他应用可以通过 ContentResolver 类(见 ContentProviderAccessApp 例子)从该内容提供者中获取或存入数据.(相当于在应用外包了一层壳),只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中它的好处:统一数据访问方式。android 系统自带的内容提供者(顶级的表示数据库名,非顶级的都是表名)这些内容提供者在 SDK 文档的 android.provider Java 包中都有介绍。见:http:/developer.android.com/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 类并根据需求重写以下方法:/* * 插入数据到内容提供者(允许其他应用向你的应用中插入数据时重写) * param uri * param initialValues 插入的数据 * return */ public Uri insert(Uri uri, ContentValues initialValues); /* * 从内容提供者中删除数据(允许其他应用删除你应用的数据时重写) * param uri * param selection 条件语句 * param selectionArgs 参数 * return */ public int delete(Uri uri, String selection, String selectionArgs);/* * 更新内容提供者已存在的数据(允许其他应用更新你应用的数据时重写) * param uri * param
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号