Intent与PendingIntent详解:使用场景与差异
"Intent和PendingIntent是Android系统中用于组件间通信的重要工具,它们在应用程序中扮演着不同的角色。Intent通常用于启动或传递消息给Activity、Service或BroadcastReceiver,而PendingIntent则是一种更为安全和控制更为严格的Intent形式,它允许其他应用通过已封装的Intent来操作你的应用。在涉及到AlarmManager和NotificationManager时,PendingIntent尤为重要,因为它可以确保在特定的触发事件(如闹钟)或用户交互(如通知)下执行相应的操作。下面将详细介绍这两者之间的区别和使用场景。 Intent:Intent是Android中的一个基础类,主要用于在不同组件之间建立连接。它可以用来启动一个新的Activity,或者传递数据给Service或BroadcastReceiver。Intent提供了显式和隐式两种启动方式,显式Intent指定目标组件的类名,而隐式Intent通过指定Action、Data、Category等信息,让系统自动寻找合适的组件去处理。Intent也可以携带数据,例如使用putExtra()方法添加键值对,以便在接收端取出使用。 PendingIntent:PendingIntent则是一种"包装"了Intent的特殊对象,它代表了一个未来的操作。使用PendingIntent,你可以允许其他应用(比如系统服务)在特定条件下,通过这个PendingIntent执行你预先设定好的Intent操作。这通常涉及到跨进程通信,比如在AlarmManager中设置一个闹钟,或者在Notification中设置用户点击后的行为。PendingIntent有三种创建方法:getActivity()、getBroadcast()和getService(),分别对应启动Activity、发送Broadcast和启动Service。 PendingIntent与Intent的主要区别在于权限和生命周期: 1. 权限控制:PendingIntent具有更严格的权限控制。当其他应用通过PendingIntent调用你的组件时,会受到你的应用的权限限制,而不是调用者的权限。 2. 生命周期:Intent直接启动组件,一旦组件启动,Intent就完成了它的使命。而PendingIntent会在指定的时间点或条件满足时才执行,它的生命周期更长。 3. 安全性:由于PendingIntent的特性,它可以防止恶意应用直接访问你的组件,增加了应用的安全性。 4. 操作范围:Intent通常只在当前应用内使用,而PendingIntent可以跨越应用边界,由系统或者其他应用触发。 示例代码中展示了如何创建一个Notification,并通过PendingIntent设置点击通知后的动作: ```java private void showNotify() { Notification notice = new Notification(); notice.icon = R.drawable.icon; notice.tickerText = "这是一个通知"; notice.defaults = Notification.DEFAULT_SOUND; notice.when = 10L; // 创建PendingIntent,当用户点击通知时启动一个Activity Intent intent = new Intent(this, TargetActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); // 将PendingIntent设置到Notification中 notice.contentIntent = contentIntent; // 发送通知 NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); manager.notify(0, notice); } ``` 在这个例子中,当用户点击通知时,PendingIntent会启动TargetActivity,即使当前应用没有在运行,系统也会恢复或启动应用来执行这个操作。 总结来说,Intent和PendingIntent都是Android系统组件间通信的重要手段,但它们的使用场景和特性有所区别。Intent适用于常规的组件启动和数据传递,而PendingIntent则更适合需要跨进程操作或需要系统级服务(如AlarmManager和NotificationManager)进行调度的情况。理解并恰当使用这两者,能够帮助开发者更好地设计和实现Android应用的功能。"
Intent和PendingIntent的区别
---------------------------------------------------------------------------------------------------------------------------
1、intent英文意思是意图,pending表示即将发生或来临的事情,比如在通知Notification中用于跳转页面,但不是马上跳转。
Intent 是及时启动,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执行后的操作。
PendingIntent常和alermanger 和notificationmanager一起使用。
区别:Intent一般是用作Activity、Sercvice、BroadcastReceiver之间传递数据,而Pendingintent,一般用在 Notification上,可以理解为延迟执行的intent,PendingIntent是对Intent一个包装。
案例一:
private void showNotify(){
Notification notice=new Notification();
notice.icon=R.drawable.icon;
notice.tickerText="您有一条新的信息";
notice.defaults=Notification.DEFAULT_SOUND;
notice.when=10L;
// 100 毫秒延迟后,震动 250 毫秒,暂停 100 毫秒后,再震动 500 毫秒
//notice.vibrate = new long[] { 100, 250, 100, 500 };出错?
//notice.setLatestEventInfo(this, "通知", "开会啦", PendingIntent.getActivity(this, 0, null, 0));
notice.setLatestEventInfo(this, "通知", "开会啦", PendingIntent.getActivity(this, 0, new Intent(this,Activity2.class), 0));//即将跳转页面,还没跳转
NotificationManager manager=(NotificationManager)getSystemService(this.NOTIFICATION_SERVICE);
manager.notify(0,notice);
}
案例二:GSM网络中android发送短信示例
String msg ="你好,美女";
String number = "135****6784";
SmsManager sms = SmsManager.getDefault();
下载后可阅读完整内容,剩余1页未读,立即下载
- 粉丝: 29
- 资源: 38
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展