一旦您使用FLAG_CANCEL_CURRENT 创建了一个新的PendingIntent,任何拥有相同PendingIntent 的先前Intent 将不再能够执行原来的PendingIntent。
例如,假设我们有这个:
Intent i=new Intent(this, Foo.class);
i.putExtra("key", 1);
PendingIntent pi=PendingIntent.getActivity(this, 0, i, 0);
我们将PendingIntent 与Notification 一起使用。
稍后,我们执行:
Intent i=new Intent(this, Foo.class);
i.putExtra("key", 2);
PendingIntent pi2=PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
此时,最初创建的 PendingIntent (pi) 不再有效,无论我们使用 pi2 做什么,都会看到更新后的额外值 (2)。
如果我们这样做了:
Intent i=new Intent(this, Foo.class);
i.putExtra("key", 2);
PendingIntent pi2=PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
此时,pi 和 pi2 都代表相同 PendingIntent,并且两者都会看到更新后的额外值 (2)。
或者,如果我们这样做了:
Intent i=new Intent(this, Foo.class);
i.putExtra("key", 2);
PendingIntent pi2=PendingIntent.getActivity(this, 0, i, 0);
此时,pi 和 pi2 仍然代表相同的 PendingIntent,但附加项不变,因为 getActivity() 返回 原始 PendingIntent 而不应用新附加项.
大多数时候,当您尝试替换 PendingIntent 中的额外内容时,FLAG_UPDATE_CURRENT 是一个很好的答案。