强调!!!以下只是我个人看法,如有错误的地方请文明指出,如有其他看法请耐心讨论
,如有看不懂可以参考其他有关博客
,最后如有想喷的出门左转不谢。
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数据所代表的图片。
注:界面中有两个按钮,一个是启动定时更换壁纸,另一个是关闭定时更换壁纸。