8

来自Android中待定意图的文档:FLAG_CANCEL_CURRENT

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

谁能解释这条线是什么意思?

4

1 回答 1

23

一旦你创建了一个新PendingIntent的 with 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与 a 一起使用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);

此时,piandpi2都表示相同 PendingIntent的,并且都将看到更新后的额外值 ( 2)。

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

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

i.putExtra("key", 2);

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

此时,piandpi2仍然表示相同的PendingIntent,但附加项不变,因为getActivity()返回原始 PendingIntent而不应用新的附加项。

大多数FLAG_UPDATE_CURRENT情况下,当您尝试替换PendingIntent.

于 2013-02-23T17:36:55.657 回答