8

Androidの Pending IntentFLAG_CANCEL_CURRENTのドキュメントから:

以前の保留中のインテントをキャンセルすることで、新しいデータを与えられたエンティティのみがそれを起動できるようになります。この保証が問題にならない場合は、FLAG_UPDATE_CURRENT を検討してください。

この行の意味を説明できる人はいますか?

4

1 に答える 1

23

で新しい を作成するPendingIntentFLAG_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);

この時点で、piとは両方とも同じpi2を表し、両方とも更新された追加値 ( ) を確認します。 PendingIntent2

または、実行した場合:

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

i.putExtra("key", 2);

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

この時点で、pipi2は同じ を表していますPendingIntentが、エクストラは変更されていません。 asは、新しいエクストラを適用せずにオリジナルgetActivity()を返します。 PendingIntent

ほとんどの場合、FLAG_UPDATE_CURRENT内のエクストラを置き換えようとしている場合は、良い答えですPendingIntent

于 2013-02-23T17:36:55.657 に答える