pendingIntent简要介绍 - l-feng/l-feng.github.io GitHub Wiki

今天在公司解决问题的时候遇到了pendingIntent过大,导致binder传输被抛弃,

虽然问题找了,但是自己对于pendingIntent的熟悉度还是不够,因此趁热打铁,

回来对于pendingIntent了解了解。

我们知道,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent

负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据

此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件

的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service

之间的交互。因此,可以将Intent理解为不同组件之间通信的“媒介”专门提供组件互相

调用的相关信息。

从字面意思理解,pendingIntent为等待的intent,其实pendingIntent是一种在一定

特殊条件下触发的intent。而intent指的是立马就会触发的。pendingIntent主要是封装

了intent信息以及对应的context信息,因为PendingIntent中保存有当前Application的

Context,使它赋予带他程序一种执行的Intent的能力,就算在执行时当前Application

已经不存在了,也能通过存在PendingIntent里的Context照样执行Intent。其实要理解pendingIntent

有一个更好的例子便是我们的短信系统,当我们发送短信的时候,短信发送成功的时候,会提示

用户短信发动成功,收到短信的时候会提醒用户对方收到短信,这便是pendIntent的很好的利用。

下来我们看下发送短信的函数

sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent);

第一个参数:destinationAddress对方手机号码

第二个参数:scAddress短信中心号码一般设置为空

第三个参数:text短信内容

第四个参数:sentIntent判断短信是否发送成功,如果你没有SIM卡,或者网络中断,则可以通过这

个itent来判断。注意强调的是“发送”的动作是否成功。那么至于对于对方是否收到,另当别论

第五个参数:deliveryIntent当短信发送到收件人时,会收到这个deliveryIntent。即强调了

“发送”后的结果

就是说是在"短信发送成功"和"对方收到此短信"才会激活 sentIntent和deliveryIntent这两个Intent。

这也相当于是延迟执行了Intent