澄清PendingIntent.FLAG_CANCEL_CURRENT的文档

时间:2013-02-23 17:11:58

标签: android

来自Android中的documentation of Pending Intent FLAG_CANCEL_CURRENT

  

通过取消先前的待处理意图,这可确保只有获得新数据的实体才能启动它。如果此保证不是问题,请考虑FLAG_UPDATE_CURRENT

任何人都可以解释这条线的含义吗?

1 个答案:

答案 0 :(得分:23)

使用PendingIntent创建新的FLAG_CANCEL_CURRENT后,对同一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);

此时,最初创建的PendingIntentpi)不再有效,无论我们使用pi2,我们都会看到更新的额外值(2

相反,如果我们这样做了:

Intent i=new Intent(this, Foo.class);

i.putExtra("key", 2);

PendingIntent pi2=PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);

此时,pipi2都代表相同的 PendingIntent,两者都会看到更新的额外值(2

或者,如果我们这样做了:

Intent i=new Intent(this, Foo.class);

i.putExtra("key", 2);

PendingIntent pi2=PendingIntent.getActivity(this, 0, i, 0);

此时,pipi2仍然代表相同的PendingIntent,但附加内容未更改,因为getActivity()会返回原始 PendingIntent没有应用新的附加内容。

大多数情况下,当您尝试替换FLAG_UPDATE_CURRENT内的额外内容时,PendingIntent是一个很好的答案。