2020-06-15 Intent 模式 显示 和隐式 启动

2020-06-15  本文已影响0人  fjasmin

Intent 是一个消息传递对象,您可以用来从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件之间的通信,但其基本用例主要包括以下三个:

1.启动 Activity

Activity 表示应用中的一个屏幕。通过将 Intent传递给 startActivity(),您可以启动新的 Activity 实例。Intent 用于描述要启动的 Activity,并携带任何必要的数据。

如果您希望在 Activity 完成后收到结果,请调用 startActivityForResult()。在 Activity 的 onActivityResult()回调中,您的 Activity 将结果作为单独的 Intent对象接收。

2.启动服务

Services 是一个不使用用户界面而在后台执行操作的组件。使用 Android 5.0(API 级别 21)及更高版本。

对于 Android 5.0(API 级别 21)之前的版本,您可以使用Services类的方法来启动服务。通过将 Intent传递给 startServices(),您可以启动服务执行一次性操作(例如,下载文件)。Intent用于描述要启动的服务,并携带任何必要的数据。

如果服务旨在使用客户端-服务器接口,则通过将 Intent传递给 bindSerivces(),您可以从其他组件绑定到此服务。

3.传递广播

广播是任何应用均可接收的消息。系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播。通过将 Intent传递 给 sendBroadCast()或 sendOrderBroadCast,您可以将广播传递给其他应用。

Intent 分为两种类型:

显式 Intent:通过提供目标应用的软件包名称或完全限定的组件类名来指定可处理 Intent 的应用。通常,您会在自己的应用中使用显式 Intent 来启动组件,这是因为您知道要启动的 Activity 或服务的类名。例如,您可能会启动您应用内的新 Activity 以响应用户操作,或者启动服务以在后台下载文件。

隐式 Intent :不会指定特定的组件,而是声明要执行的常规操作,从而允许其他应用中的组件来处理。例如,如需在地图上向用户显示位置,则可以使用隐式 Intent,请求另一具有此功能的应用在地图上显示指定的位置。

使用隐式 Intent 时,Android 系统通过将 Intent 的内容与在设备上其他应用的清单文件中声明的 Intent 过滤器进行比较,从而找到要启动的相应组件。如果 Intent 与 Intent 过滤器匹配,则系统将启动该组件,并向其传递 Intent 对象。如果多个 Intent 过滤器兼容,则系统会显示一个对话框,支持用户选取要使用的应用。

Intent 过滤器是应用清单文件中的一个表达式,用于指定该组件要接收的 Intent 类型。例如,通过为 Activity 声明 Intent 过滤器,您可以使其他应用能够直接使用某一特定类型的 Intent 启动 Activity。同样,如果您没有为 Activity 声明任何 Intent 过滤器,则 Activity 只能通过显式 Intent 启动。

图 1 显示如何在启动 Activity 时使用 Intent。当 Intent 对象显式命名某个具体的 Activity 组件时,系统立即启动该组件。

图 1. 隐式 Intent 如何通过系统传递以启动其他 Activity:

[1] Activity A 创建包含操作描述的 Intent,并将其传递给 startActivity()。

[2] Android 系统搜索所有应用中与 Intent 匹配的 Intent 过滤器。找到匹配项之后,

[3] 该系统通过调用匹配 Activity (Activity B) 的 OnCreat() 方法并将其传递给 Intent,以此启动匹配 Activity。

上一篇下一篇

猜你喜欢

热点阅读