`
jgsj
  • 浏览: 962355 次
文章分类
社区版块
存档分类
最新评论

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的。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics