PendingIntent —— 业界良心,开发者的贴心工具
2023-11-18 05:36:21
PendingIntent简介
PendingIntent,一个Android开发中的重要工具,它允许开发者在不同的组件、进程甚至应用程序间传递Intent。在Intent的基础上,PendingIntent增加了两个重要功能:跨进程和延期执行。凭借这两个新增功能,PendingIntent可以被用于多种场景。比如:
- 使用startActivityForResult()时,PendingIntent允许开发者将返回结果发送到另一个应用程序。
- 用于实现隐式启动。当开发者需要启动一个尚未确定的组件时,可以使用PendingIntent来保存启动Intent。当组件确定后,即可使用PendingIntent启动该组件。
- PendingIntent也可用于实现跨进程通信。在AIDL中,PendingIntent可以用来传递一个异步操作。这样,当AIDL服务完成操作后,可以调用PendingIntent,将结果返回给请求方。
- 更重要的是,PendingIntent可以被标记为FLAG_UPDATE_CURRENT 。这允许开发者将新Intent放入一个已经存在的PendingIntent。当PendingIntent执行时,系统将使用新Intent替换旧Intent。这个功能非常有用,比如在startActivityForResult()中,它允许开发者更新Activity的请求码,而不必创建新的PendingIntent。
PendingIntent为何物?
从字面意思上理解,Pending 意为“待定”,Intent 意为“意图”。因此,PendingIntent 可以理解为“待定的意图”。这种“待定”表现在两个方面:
- 跨进程 。PendingIntent 可以跨进程使用。这使得开发者可以在不同的应用程序或组件之间传递 Intent,而无需考虑进程边界。
- 延迟执行 。PendingIntent 可以延迟执行。这意味着开发者可以先创建 PendingIntent,然后在以后的某个时间点再使用它来启动一个 Activity、Service 或 BroadcastReceiver。
举例:使用 PendingIntent
举个简单的例子,假设你在应用程序 A 中有一个 Button,当你点击该 Button 时,你想启动应用程序 B 中的某个 Activity。可以使用 PendingIntent 来实现这个功能。
- 首先,你需要创建一个 Intent,指定要启动的 Activity。
- 然后,使用 PendingIntent.getActivity() 方法创建一个 PendingIntent,并传递 Intent 作为参数。
- 最后,当用户点击 Button 时,调用 PendingIntent.send() 方法启动 Activity。
这样,你就成功地使用了 PendingIntent 来启动另一个应用程序中的 Activity。
澎湃的使用场景,日常应用
- 隐式启动:
顾名思义,就是一种没有明确指定要启动的组件的启动方式。比如,你想启动一个音乐播放器,但你不知道手机上安装了哪些音乐播放器。这时,你可以使用 PendingIntent 来创建一个隐式启动 Intent。当用户点击某个按钮时,系统会自动选择一个合适的音乐播放器来启动。
- 跨进程通信:
PendingIntent 可以用来在不同的进程之间传递数据。比如,你想从一个 Service 向一个 Activity 发送一条消息。你可以使用 PendingIntent 来创建一个 Intent,并将消息放入 Intent 中。然后,你可以在 Service 中调用 PendingIntent.send() 方法发送 Intent。Activity 收到 Intent 后,就可以处理消息。
- AlarmManager定时任务:
AlarmManager 是 Android 系统中一个用来管理定时任务的类。你可以使用 AlarmManager 来创建一个定时任务。当定时任务触发时,系统会自动执行相应的操作。比如,你可以使用 AlarmManager 来创建一个闹钟,当闹钟响起时,系统会自动播放音乐。
- startActivityForResult():
startActivityForResult() 方法允许你在启动一个 Activity 后,等待该 Activity 返回结果。你可以使用 PendingIntent 来创建一个 Intent,并将 Intent 传递给 startActivityForResult() 方法。当 Activity 返回结果时,系统会自动调用 onActivityResult() 方法,你可以在该方法中处理结果。
快捷的结语
PendingIntent 是一个非常有用的工具,它可以帮助开发者实现各种各样的功能。如果你想在你的应用程序中使用 PendingIntent,可以参考本文中的示例代码。