android compare方法,How does android compare pending intents

A description of an Intent and target action to perform with it.

Instances of this class are created with

getActivity(android.content.Context,int,android.content.Intent,int),

getActivities(android.content.Context,int,android.content.Intent[],int),

getBroadcast(android.content.Context,int,android.content.Intent,int),

getService(android.content.Context,int,android.content.Intent,int);

the returned object can be handed to other applications so that they

can perform the action you described on your behalf at a later time.

By giving a PendingIntent to another application, you are granting it

the right to perform the operation you have specified as if the other

application was yourself (with the same permissions and identity). As

such, you should be careful about how you build the PendingIntent:

almost always, for example, the base Intent you supply should have the

component name explicitly set to one of your own components, to ensure

it is ultimately sent there and nowhere else.

A PendingIntent itself

is simply a reference to a token maintained by the system describing

the original data used to retrieve it. This means that, even if its

owning application's process is killed, the PendingIntent itself will

remain usable from other processes that have been given it. If the

creating application later re-retrieves the same kind of PendingIntent

(same operation, same Intent action, data, categories, and components,

and same flags), it will receive a PendingIntent representing the same

token if that is still valid, and can thus call cancel() to remove it.

Because of this behavior, it is important to know when two Intents are

considered to be the same for purposes of retrieving a PendingIntent.

A common mistake people make is to create multiple PendingIntent

objects with Intents that only vary in their "extra" contents,

expecting to get a different PendingIntent each time. This does not

happen. The parts of the Intent that are used for matching are the

same ones defined by Intent.filterEquals. If you use two Intent

objects that are equivalent as per Intent.filterEquals, then you will

get the same PendingIntent for both of them.

There are two typical ways to deal with this.

If you truly need multiple distinct

PendingIntent objects active at the same time (such as to use as two

notifications that are both shown at the same time), then you will

need to ensure there is something that is different about them to

associate them with different PendingIntents. This may be any of the

Intent attributes considered by Intent.filterEquals, or different

request code integers supplied to

getActivity(android.content.Context,int,android.content.Intent,int),

getActivities(android.content.Context,int,android.content.Intent[],int),

getBroadcast(android.content.Context,int,android.content.Intent,int),

or getService(android.content.Context,int,android.content.Intent,int).

If you only need one PendingIntent active at a time for any of the

Intents you will use, then you can alternatively use the flags

FLAG_CANCEL_CURRENT or FLAG_UPDATE_CURRENT to either cancel or modify

whatever current PendingIntent is associated with the Intent you are

supplying.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值