美文网首页
PendingIntent总结

PendingIntent总结

作者: 满天星爱我 | 来源:发表于2018-09-25 12:28 被阅读18次

    介绍

    PendingIntent是一种处于pending状态的意图,而pending状态表示的是一种待定、等待、即将发生的意思,就是说接下来又一个Intent(即意图)将在某个待定的时刻发生。可以看出PendingIntentIntent的区别在于,PendingIntent是在将来某个不确定的时刻发生,而Intent是立刻发生。PendingIntent典型的使用场景是给RemoteViews添加单击事件,因为RemoteViews运行在远程进程中,因此RemoteViews不同于普通的View,所以无法直接像View那样通过setOnClickListener方法来设置单击事件。要想给RemoteViews设置单击事件,就必须使用PendingIntentPendingIntent通过sendcancel方法来发送和取消特定的待定Intent

    PendingIntent的主要方法

    • getActivity(Context context,int requestCode,Intent intent,int flags)
      获得一个PendingIntent,该待定意图发生时,效果相当于Context.startActivity(Intent)

    • getService(Context context,int requestCode,Intent intent,int flags)
      获得一个PendingIntent,该待定意图发生时,效果相当于Context.startService(Intent)

    • getBroadcast(Context context,int requestCode,Intent intent,int flags)
      获得一个PendingIntent,该待定意图发生时,效果相当于Context.sendBroadcast(Intent)

    PendingIntent的匹配规则

    如果两个PendingIntent它们内部的Intent相同并且requestCode也相同,那么这两个PendingIntent就是相同的。requestCode相同比较好理解,那么什么情况下Intent相同呢?Intent的匹配规则是:如果两个IntentComponentNameintent-filter都相同,那么这两个Intent就是相同的。需要注意的是Extras不参与Intent的匹配过程,只要Intent之间的ComponentNameintent-filter相同,即使它们的Extras不同,那么这两个Intent也是相同的。

    • FLAG_ONE_SHOT
      当前描述的PendingIntent只能被使用一次,然后它就会被自动cancel,如果后续还有相同的PendingIntent,那么它们的send方法就会调用失败。对于通知栏消息来说,如果用此标记位,那么同类的通知也只能使用一次,后续的通知单机后将无法打开。

    • FLAG_NO_CREATE
      当前描述的PendingIntent不会主动创建,如果当前PendingIntent之前不存在,那么getActivitygetServicegetBroadcast方法会直接返回null,即获取PendingIntent失败。这个标记位很少见,它无法单独使用,因此在日常开发中它并没有太多的使用意义

    • FLAG_CANCEL_CURRENT
      当前描述的PendingIntent如果已经存在,那么它们都会被cancle,然后系统会创建一个新的PendingIntent。对于通知栏消息来说,那么被cancel的消息单击后将无法打开。

    • FLAG_UPDATE_CURRENT
      当前描述的PendingIntent如果已经存在,那么它们都会被更新,即它们的Intent中的Extras会被替换成最新的。

    相关文章

      网友评论

          本文标题:PendingIntent总结

          本文链接:https://www.haomeiwen.com/subject/lroqdftx.html