PendingIntent 用法深入理解

PendingIntent即是一个Intent的描述,我们可以把这个描述交给别的程序,别的程序根据这个描述在后面的别的时间做你安排做的事情。换种说法Intent字面意思是意图,我们想要做的事情,在Activity我们可以立即执行它,PendingIntent相当于对Intent执行了包装,我们不一定要马上执行它,我们将其包装后传递给其他ActivityApplication。这时获取到PendingIntentApplication能够根据里面的Intent来得知发出者的意图选择执行。

 


PendingIntentAndroid系统管理并持有的用于描述和获取原始数据的对象的标志(引用)。这就意味着,即便创建该PendingIntent对象的进程被杀死了,这个PendingItent对象自己在其他进程中还是可用的。

如果Intent对象的Action是相同的,Data也是相同的,Categories也是相同的,Components也是相同的,Flags也是相同的),并且之前获取的PendingIntent对象还有效的话,那么该进程获取到的PendingItent对象将获得同一个对象的引用,可以通过cancel()方法来从系统中移除它。

PendingIntent对象由系统持有,因此不能通过设置不同的Extra来生成不同的PendingIntent对象,系统只通过刚才在上面提到的几个要素来判断PendingIntent对象是否是相同的。

PendingIntent有以下flag

FLAG_CANCEL_CURRENT:如果当前系统中已经存在一个相同的PendingIntent对象,那么就将先将已有的PendingIntent取消,然后重新生成一个PendingIntent对象。

FLAG_NO_CREATE:如果当前系统中不存在相同的PendingIntent对象,系统将不会创建该PendingIntent对象而是直接返回null

FLAG_ONE_SHOT:PendingIntent只作用一次。

FLAG_UPDATE_CURRENT:如果系统中已存在该PendingIntent对象,那么系统将保留该PendingIntent对象,但是会使用新的Intent来更新之前PendingIntent中的Intent对象数据,例如更新Intent中的Extras

创建PendingIntent方式:

PendingIntent.getActivity (context, requestCode, broadIntent, flags)

PendingIntent.getBroadcast(context,requestCode, broadIntent, flags)

PendingIntent.getService (context, requestCode, broadIntent, flags)

API文档里虽然未使用requestCode参数,但实际上是通过该参数来区别不同的Intent的。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值