来自Android中的documentation of Pending Intent FLAG_CANCEL_CURRENT
:
通过取消先前的待处理意图,这可确保只有获得新数据的实体才能启动它。如果此保证不是问题,请考虑FLAG_UPDATE_CURRENT
任何人都可以解释这条线的含义吗?
答案 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);
此时,最初创建的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
没有应用新的附加内容。
大多数情况下,当您尝试替换FLAG_UPDATE_CURRENT
内的额外内容时,PendingIntent
是一个很好的答案。