PendingIntent详解

 Intent是一个意图,一个描述了想要启动一个Activity、Broadcast或是Service的意图。它主要持有的信息是它想要启动的组件(Activity、Broadcast或是Service),在开发操做中,须要经过 startActivity , startService 或sendBroadcast 方法来启动这个意图执行某些操做!!component

  PendingIntent能够认为是对Intent的包装,实际上就是,供当前App或以外的其余App调用,而常见的是供外部App使用,外部App执行这个 PendingIntent时,间接地调用里面的Intent,即外部App延时执行PendingIntent中描述的Intent及其最终行为,PendingIntent主要持有的信息是它所包装的Intent和当前App Context,即便当前App已经不存在了,也能经过存在于PendingIntent里的 Context来执行Intent。当你把PendingIntent递交给别的程序进行处理时,PendingIntent仍然拥有PendingIntent原程序所拥有的权限,当你从系统取得一个PendingIntent时,必定要很是当心才行,好比,一般,若是Intent目的地是你本身的component(Activity/Service/BroadcastReceiver)的话,你最好采用在Intent中显示指定目的component名字的方式,以确保Intent最终能发到目的,不然Intent最后可能不知道发到哪里了。对象

能够这样理解:当你想在Aactivity中启动另外一个Bactivity,那么你能够选择两种状况[当即启动或延时启动]:
1.经过intent配置须要启动的Bactivity,而后调用startActivity()方法,让他当即执行启动操做,跳转过去
2.另外一种状况是,你虽然想启动另外一个Bactivity,但是你并不想立刻跳转到Bactivity页面,你想静等5分钟以后再跳转到Bactivity,那么你能够经过PendingIntent来实现[固然实现方式有不少啦,这里仅是想说明PendingIntent与intent的区别],PendingIntent能够包装第1步中的intent,而后经过AlarmManager这个定时器,定制5分钟以后启PendingIntent,实现这种延时操做,若是你仍是听着似懂非懂,一头雾水,我表示颇有压力了,我该怎么说你才能清楚呢,理论终究是抽象的,后见将会经过一个程序说明一下,程序中是启动一个BroadcastReceiver,其实原理都是同样的!!进程

如何得到一个PendingIntent呢?其实很简单:
1.你能够经过getActivity(Context context, int requestCode, Intent intent, int flags)系列方法从系统开发

取得一个用于启动一个Activity的PendingIntent对象
2.能够经过getService(Context context, int requestCode, Intent intent, int flags)方法从系统取得一个get

用于启动一个Service的PendingIntent对象
3.能够经过getBroadcast(Context context, int requestCode, Intent intent, int flags)方法从系统取得一it

个用于向BroadcastReceiver的发送广播的PendingIntent对象ast

PendingIntent几个常量:原理

1.FLAG_CANCEL_CURRENT :若是AlarmManager管理的PendingIntent已经存在,那么将会取消当前的配置

PendingIntent,从而建立一个新的PendingIntent
2.FLAG_UPDATE_CURRENT:若是AlarmManager管理的PendingIntent已经存在,可让新的Intent更新以前权限

PendingIntent中的Intent对象数据,例如更新Intent中的Extras,另外,咱们也能够在PendingIntent的原进程

中调用PendingIntent的cancel ()把其从系统中移除掉
3.FLAG_NO_CREATE :若是AlarmManager管理的PendingIntent已经存在,那么将不进行任何操做,直接返回已经

存在的PendingIntent,若是PendingIntent不存在了,那么返回null

相关文章
相关标签/搜索