pengdingIntent的使用

Android  2018年1月24日 pm5:43发布7年前 (2018)更新 城堡大人
72 0 0

什么是pengdingIntent
pendingIntent字面意义:等待的,未决定的Intent。

要得到一个pendingIntent对象,使用方法类的静态方法

  1. getActivity(Context, int, Intent, int)
  2. getBroadcast(Context, int, Intent, int)
  3. getService(Context, int, Intent, int)

分别对应着Intent的3个行为,跳转到一个activity组件、打开一个广播组件和打开一个服务组件。

可以看到,要得到这个对象,必须传入一个Intent作为参数,必须有context作为参数。
pendingIntent是一种特殊的Intent。主要的区别在于Intent的执行立刻的,而pendingIntent的执行不是立刻的。pendingIntent执行的操作实质上是参数传进来的Intent的操作,但是使用pendingIntent的目的在于它所包含的Intent的操作的执行是需要满足某些条件的。

主要的使用的地方和例子:通知Notificatio的发送,短消息SmsManager的发送和警报器AlarmManager的执行等等。

Intent和PendingIntent的区别?

  1. Intent是立即使用的,而PendingIntent可以等到事件发生后触发,PendingIntent可以cancel
  2. Intent在程序结束后即终止,而PendingIntent在程序结束后依然有效
  3. PendingIntent自带Context,而Intent需要在某个Context内运行
  4. Intent在原task中运行,PendingIntent在新的task中运行

PendingIntent用于描述Intent及其最终的行为.

你可以通过getActivity(Context context, int requestCode, Intent intent, int flags)系列方法从系统取得一个用于启动一个Activity的PendingIntent对象,

可以通过getService(Context context, int requestCode, Intent intent, int flags)方法从系统取得一个用于启动一个Service的PendingIntent对象

可以通过getBroadcast(Context context, int requestCode, Intent intent, int flags)方法从系统取得一个用于向BroadcastReceiver的Intent广播的PendingIntent对象

返回的PendingIntent可以递交给别的应用程序,然后继续处理。这里的话你可以稍后才处理PendingIntent中描述的Intent及其最终行为。

当你把PendingIntent递交给别的程序进行处理时,PendingIntent仍然拥有PendingIntent原程序所拥有的权限(with the same permissions and identity).当你从系统取得一个PendingIntent时,一定要非常小心才行。比如,通常,如果Intent目的地是你自己的component(Activity/Service/BroadcastReceiver)的话,你最好采用在Intent中显示指定目的component名字的方式,以确保Intent最终能发到目的,否则Intent最后可能不知道发到哪里了。一个PendingIntent就是Android系统中的一个token(节点,这个应该是Linux或C\C++用语)的一个对象引用,它描述了一些将用于retrieve的数据(这里,这些数据描述了Intent及其最终的行为)。

这就意味着即使PendingIntent原进程结束了的话, PendingIntent本身仍然还存在,可在其他进程(PendingIntent被递交到的其他程序)中继续使用.如果我在从系统中提取一个PendingIntent的,而系统中有一个和你描述的PendingIntent对等的PendingInent, 那么系统会直接返回和该PendingIntent其实是同一token的PendingIntent,而不是一个新的token和PendingIntent。然而你在从提取PendingIntent时,通过FLAG_CANCEL_CURRENT参数,让这个老PendingIntent的先cancel()掉,这样得到的pendingInten和其token的就是新的了。

通过FLAG_UPDATE_CURRENT参数的话,可以让新的Intent会更新之前PendingIntent中的Intent对象数据,例如更新Intent中的Extras。另外,我们也可以在PendingIntent的原进程中调用PendingIntent的cancel ()把其从系统中移除掉。

版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

Android自定义水平Seekbar简介

前言Android默认的Seekbar就是水平的,为啥这里需要自定义呢?在项目中我们大多数Seekbar是可以用原生的解决,但是个别客户对Seekbar效果做了定制化,如果用Android原生的达不到客户需求。正文直入正题,效果图第一个是Android原生的SeekBar第二个是自定...

Android调试时出现Read-only file system简介

前言记录一下,方便自己查阅。正文在调试机器是,push了一个WifiDebug.apk到 /system/priv-app/WifiDebug,由于忘记改签名了,重启机器后一直奔溃导致机器一直卡在动画界面。ps : /system/priv-app/WifiDebug 在push前创建虽...

[摘]已知圆心,半径,角度,求圆上的任一点的坐标

前言原理很简单,大家初中都学过的,但,由于Java中的sin和cos传入的值是弧度,我一开始一直用角度,导致得不出对应的值。摘抄于此,方便自己查阅。好记性不如烂笔头正文PS:本文摘抄,只是文本继续一定编辑和整理。圆心坐标 :(x0, y0)半径 : r角度: a设圆上任何一点坐标...

Android6.0 禁止安装未知来源应用

推荐使用 极客导航 :125啦极客导航(http://www.biumall.com/jike.html)在Android 中可以禁止安装第三方应用,如果你的设备需要禁止所有应用安装,你就可以在这做些文章。/*** @deprecated Use {@link android.pro...

监听和获取Android 设备的USER_UNLOCKED状态

前言Android有些功能需要user unlocked之后才能使用,因此在启动前需要判断一下当前Android设备是否unlocked。这简单记录一下,方便自己查阅。正文判断isUserUnlocked启动某些功能时通过下面方式判断一下是否已经可以启动了。public boolean...

XmlSerializer简单使用

前言XmlSerializer是Android提供的一个类,用于创建和编辑XML文档。本文简单记录一下XmlSerializer的使用。正文常用方法下面是XmlSerializer创建xml文档的常用的方法。1. endDocument() 结束XML文档2. startDocum...