PendingIntent与Intent的区别

强调!!!以下只是我个人看法,如有错误的地方请文明指出微笑,如有其他看法请耐心讨论微笑,如有看不懂可以参考其他有关博客微笑,最后如有想喷的出门左转不谢。微笑

1、Android使用intent来封装程序的“调用意图”,不管程序想启动一个activity也好,启动一个Service也好还是想启动一个BroadcastReceiver也好,Android使用统一的intent对象来封装这种“启动意图”,很明显使用了intent提供了一致的编程模型,也降低了耦合性。如果直接使用startActivity(Class activityClass)的方法来启动特定的组件会造成一种硬编码耦合,不利于高层次的解耦。总之,intent封装了Android应用程序需要启动某个组件的“意图”,还是应用程序组件之间通信的重要媒介。

2、pendingIntent是特殊的intent。也可以启动特定的activity、service、broadcastReceiver。pendingIntent类提供了构建pendingIntent的静态方法:getActivity(Context,int,Intent,int)、getBroadcast(Context,int,Intent,int)、getService(Context,int,Intent,int)。并且使用pendingIntent可以进行延时消息处理。下面是用pendingIntent启动其他组件获得一个PendingIntent的实例的格式:

(1)启动一个activity

Intent intent = new Intent(this,OtherActivity.class);

PendingIntent pending = PendingIntent.getActivity(this,0,intent,0);

(2)启动一个service

Intent intent = new Intent(this,OtherService.class);

PendingIntent pending = PendingIntent.getService(this,0,intent,0);

(3)启动一个广播broadcast

Intent intent = new Intent("com.wqr.broadcast");

PendingIntent pending = PendingIntent.getBroadcast(this,0,intent,0);

总之,如果在当前activity中启动另一个activity有两种情况:立即启动则用intent;延时启动则用pendingIntent。

3、下面是摘抄  详细见这个地址   http://www.cnblogs.com/itcqx/p/5557241.html

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

b.的意思就是,intent是及时启动的,它随所在的activity的消失而消失;PendingIntent 可以看作是对intent的包装,通常通过getActivity,getBroadcast ,getService来得到pendingintent的实例,当前activity并不能马上启动它所包含的intent,而是在外部执行 pendingintent时,调用intent的。正由于pendingintent中 保存有当前App的Context,使它赋予外部App一种能力,使得外部App可以如同当前App一样的执行pendingintent里的 Intent, 就算在执行时当前App已经不存在了,也能通过存在pendingintent里的Context照样执行Intent。另外还可以处理intent执行后的操作。常和alermanger 和notificationmanager一起使用。 
Intent一般是用作Activity、Sercvice、BroadcastReceiver之间传递数据,而Pendingintent,一般用在 Notification上,可以理解为延迟执行的intent,PendingIntent是对Intent一个包装。

4、小例子定时更换壁纸:

本实例将通过AlarmManager来周期性的调用某个Service,从而实现定时更换壁纸功能。

更换壁纸的API为WallpaperManager,它提供了clear()方法来清除壁纸,还提供了如下方法来设置系统壁纸:

setBitmap(Bitmap bitmap):将壁纸设置为bitmap所代表的位图。

setResource(int i):将壁纸设置为i资源所代表的图片。

setStream(InputStream data):将壁纸设置为data数据所代表的图片。

注:界面中有两个按钮,一个是启动定时更换壁纸,另一个是关闭定时更换壁纸。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值