PendingIntent 用法深入理解

PendingIntent即是一个Intent的描述,我们可以把这个描述交给别的程序,别的程序根据这个描述在后面的别的时间做你安排做的事情。换种说法Intent字面意思是意图,我们想要做的事情,在Activity我们可以立即执行它,PendingIntent相当于对Intent执行了包装,我们不一定要马上执行它,我们将其包装后传递给其他ActivityApplication。这时获取到PendingIntentApplication能够根据里面的Intent来得知发出者的意图选择执行。

 


PendingIntentAndroid系统管理并持有的用于描述和获取原始数据的对象的标志(引用)。这就意味着,即便创建该PendingIntent对象的进程被杀死了,这个PendingItent对象自己在其他进程中还是可用的。

如果Intent对象的Action是相同的,Data也是相同的,Categories也是相同的,Components也是相同的,Flags也是相同的),并且之前获取的PendingIntent对象还有效的话,那么该进程获取到的PendingItent对象将获得同一个对象的引用,可以通过cancel()方法来从系统中移除它。

PendingIntent对象由系统持有,因此不能通过设置不同的Extra来生成不同的PendingIntent对象,系统只通过刚才在上面提到的几个要素来判断PendingIntent对象是否是相同的。

PendingIntent有以下flag

FLAG_CANCEL_CURRENT:如果当前系统中已经存在一个相同的PendingIntent对象,那么就将先将已有的PendingIntent取消,然后重新生成一个PendingIntent对象。

FLAG_NO_CREATE:如果当前系统中不存在相同的PendingIntent对象,系统将不会创建该PendingIntent对象而是直接返回null

FLAG_ONE_SHOT:PendingIntent只作用一次。

FLAG_UPDATE_CURRENT:如果系统中已存在该PendingIntent对象,那么系统将保留该PendingIntent对象,但是会使用新的Intent来更新之前PendingIntent中的Intent对象数据,例如更新Intent中的Extras

创建PendingIntent方式:

PendingIntent.getActivity (context, requestCode, broadIntent, flags)

PendingIntent.getBroadcast(context,requestCode, broadIntent, flags)

PendingIntent.getService (context, requestCode, broadIntent, flags)

API文档里虽然未使用requestCode参数,但实际上是通过该参数来区别不同的Intent的。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PendingIntentAndroid 系统提供的一个类,用于表示在未来某个时刻执行的 IntentPendingIntent 可以在应用程序的不同组件(如 Activity、Service、BroadcastReceiver)之间传递,并且可以在后台执行,即使应用程序已经退出或者设备进入睡眠状态。 PendingIntent 主要用于以下场景: 1. 触发操作:当用户点击通知或小部件时,可以使用 PendingIntent 启动一个 Activity、Service 或广播等来执行相应的操作。 2. 定时器:可以使用 PendingIntent 启动 AlarmManager 定时器,以在指定的时间或时间间隔后触发操作。 3. 操作链:可以使用 PendingIntent 将操作链接在一起,以便在后台执行多个操作。 PendingIntent用法包括以下步骤: 1. 创建一个 Intent 对象,用于描述要执行的操作,可以设置 Action、Data、Category、Extra 等属性。 2. 使用 PendingIntent 的静态方法 getActivity()、getService()、getBroadcast() 等创建一个 PendingIntent 对象,用于描述要执行的操作。 3. 将 PendingIntent 对象传递给其他组件,比如 Notification、Widget 等,以便在未来某个时刻触发操作。 4. 在指定的时刻或事件发生时,系统会自动启动 PendingIntent 对象所描述的操作,并且可以在后台执行。 需要注意的是,PendingIntent 对象是可以重复使用的,即多次启动同一个 PendingIntent 对象会执行相同的操作。如果要创建不同的 PendingIntent 对象,需要使用不同的请求码(requestCode)或设置不同的数据(setData())。 代码示例: ``` // 创建一个 Intent 对象,用于描述要执行的操作 Intent intent = new Intent(this, MainActivity.class); intent.putExtra("message", "Hello"); // 使用 PendingIntent 的静态方法 getBroadcast() 创建一个 PendingIntent 对象 PendingIntent pIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); // 将 PendingIntent 对象传递给 Notification,以便在未来某个时刻触发操作 NotificationCompat.Builder builder = new NotificationCompat.Builder(this); builder.setContentIntent(pIntent); // 在指定的时刻或事件发生时,系统会启动 PendingIntent 对象所描述的操作 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值