Android应用程序组件(一)
2015-08-20 14:32
267 查看
Android应用程序框架可以支持利用一组可重用的组件创建丰富而有意思的应用。本节解释如何构建那些作为应用程序构建块的组件及如何使用意图将它们连接起来。
启动活动。 活动代表应用程序的一片单幕。可以通过向
启动服务。服务是没有用户界面,在后台执行任务的组件。可以通过向
传递广播。广播是任何应用程序都可以接收的消息。系统为系统事件发送各种各样的广播,例如系统启动、设备开始充电等。可以通过将意图
显式意图。显式意图指定启动组件的名称(类的可辨识的名称)。典型地,可以在应用程序中使用显示意图启动一个组件,因为知道要启动的这个活动或服务的类名。例如,针对一个用户动作启动一个活动来响应,或者在开启一个服务在后台下载文件。
隐式意图。隐式意图并不通过名称指定一个特定的组件,而是声明一个需要执行的一般的动作,而让任何一个应用程序中的组件来处理它。例如,如果想要向用户显示在地图上显示一个地图,可以使用一个隐式的意图来请求另一个能够完成这项动作的应用程序在地图上显示一个位置。
当创建一个显示意图来启动活动或服务时,系统立即启动在意图对象中指定的应用程序组件。
当创建一个隐式意图时,Android系统通过比较意图的内容和声明在各个应用程序清单文件中的意图过滤器寻找适当的组件。如果意图和某个组件的意图过滤器匹配,系统启动这个组件并将意图对象传给该活动。如果有多个匹配的组件,系统会显示一个对话框让用户来选择使用哪一个应用程序。
意图过滤器是应用程序清单文件中的一个元素,指定组件想要接收的意图的类型。例如,通过声明一个活动的意图过滤器,可以让其他应用程序通过某一类型的意图直接启动该活动。然而,如果不给活动指定任何意图过滤器,那么它只有通过显式意图启动。
注意:为了确保应用程序的安全性,当启动服务时总使用显示意图,而不要为服务声明意图过滤器。使用隐式意图启动服务是一个安全风险因为并不确定该服务可以响应这个意图并且用户无法看到启动了哪个服务。
意图和意图过滤器
意图是用来向其他组件请求动作使用的消息对象。尽管意图以多种方式便利了组件之间的交流,但有以下3个基本的用例:启动活动。 活动代表应用程序的一片单幕。可以通过向
startActivity()传递一个意图启动活动的一个新的实例。意图描述了要启动的活动和任何需要的数据。如果要在被启动的活动结束后获得一个结果,可以调用
startActivityForResult(),这样可以在源活动的
onActivityResult()回调中以另一个意图对象的方式接收返回的结果。
启动服务。服务是没有用户界面,在后台执行任务的组件。可以通过向
startService()传递一个意图启动服务来执行一次性的任务(例如下载一个文件)。意图描述了要启动的服务和任何需要的数据。如果使用一个客户-服务器接口设计,可以通过传递意图到
bindService()方法将另一个组件绑定到该服务上。
传递广播。广播是任何应用程序都可以接收的消息。系统为系统事件发送各种各样的广播,例如系统启动、设备开始充电等。可以通过将意图
sendBroadcast()、
sendOrderedBroadcast()和
sendStickyBroadcast()方法来向其他应用程序传递广播。
意图类型
有两类意图:显式意图。显式意图指定启动组件的名称(类的可辨识的名称)。典型地,可以在应用程序中使用显示意图启动一个组件,因为知道要启动的这个活动或服务的类名。例如,针对一个用户动作启动一个活动来响应,或者在开启一个服务在后台下载文件。
隐式意图。隐式意图并不通过名称指定一个特定的组件,而是声明一个需要执行的一般的动作,而让任何一个应用程序中的组件来处理它。例如,如果想要向用户显示在地图上显示一个地图,可以使用一个隐式的意图来请求另一个能够完成这项动作的应用程序在地图上显示一个位置。
当创建一个显示意图来启动活动或服务时,系统立即启动在意图对象中指定的应用程序组件。
当创建一个隐式意图时,Android系统通过比较意图的内容和声明在各个应用程序清单文件中的意图过滤器寻找适当的组件。如果意图和某个组件的意图过滤器匹配,系统启动这个组件并将意图对象传给该活动。如果有多个匹配的组件,系统会显示一个对话框让用户来选择使用哪一个应用程序。
意图过滤器是应用程序清单文件中的一个元素,指定组件想要接收的意图的类型。例如,通过声明一个活动的意图过滤器,可以让其他应用程序通过某一类型的意图直接启动该活动。然而,如果不给活动指定任何意图过滤器,那么它只有通过显式意图启动。
注意:为了确保应用程序的安全性,当启动服务时总使用显示意图,而不要为服务声明意图过滤器。使用隐式意图启动服务是一个安全风险因为并不确定该服务可以响应这个意图并且用户无法看到启动了哪个服务。
相关文章推荐
- 如何解决Android 5.0中出现的警告:Service Intent must be explict
- Android 自定义滑动开关ToggleButton
- Android Studio Jar、so、library项目依赖
- Android过度绘制优化心得
- android studio添加三方jar包
- Android性能优化(三),数据库优化
- 【android】Fastboot命令详解
- Android之开发常用颜色
- Android基础入门教程——4.3.2 BroadcastReceiver庖丁解牛
- Android 桌面Widget开发要点解析(时间日期Widget)
- 编译Android内核
- Android Studio 虚拟机错误
- android sqlite 的创建与使用,sqlite自定义框架。
- android之Widget
- android异步任务详解 AsynTask
- Android权限Uri.parse的几种用法
- android web服务器 json
- Android 广播 总结
- Android 操作SQLite基本用法
- 【Android 应用开发】Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组