Intent和PendingIntent之间的区别

我读了一些文章,似乎都做了同样的事情,我想知道什么是开始这样的服务之间的区别:

Intent intent = new Intent(this, HelloService.class); startService(intent); 

或者像这样:

 Calendar cal = Calendar.getInstance(); Intent intent = new Intent(this, MyService.class); PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0); AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent); 

正如我通读,这两个做同样的事情,如果在服务中,你返回一个参数START_STICKY;

意图

Android Intent是一个携带意图的对象,即从应用程序内部或外部的一个组件到另一个组件的消息。 意图可以在应用程序的三个核心组件之一(活动,服务和广播接收器)之间传递消息。

意图本身,一个意图对象,是一个被动的数据结构。 它包含要执行的操作的抽象描述。

例如:假设你有一个Activity需要启动一个电子邮件客户端并发送一封电子邮件。 要做到这一点,您的活动将发送意向ACTION_SEND行动,以及适当的select器到Android意向parsing器:

 Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.parse("mailto:")); // only email apps should handle this 

指定的select器为用户提供适当的界面,以select如何发送您的电子邮件数据。

明显的目的

 // Explicit Intent by specifying its class name Intent i = new Intent(this, TargetActivity.class); i.putExtra("Key1", "ABC"); i.putExtra("Key2", "123"); // Starts TargetActivity startActivity(i); 

隐含意图

 // Implicit Intent by specifying a URI Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com")); // Starts Implicit Activity startActivity(i); 

待定意图

PendingIntent是您向外部应用程序(例如NotificationManager,AlarmManager,主屏幕AppWidgetManager或其他第三方应用程序)提供的令牌,允许外部应用程序使用您的应用程序的权限执行预定义的代码。

通过将PendingIntent提供给另一个应用程序,您授予它执行您所指定的操作的权限,就好像另一个应用程序是您自己的(具有相同的权限和标识)。 因此,您应该小心如何构buildPendingIntent:例如,您提供的基本Intent应该将组件名称明确地设置为您自己的组件之一,以确保它最终被发送到那里和其他地方。

待定意向示例: http : //android-pending-intent.blogspot.in/

来源: Android意图和Android挂起的意图

希望这可以帮助。

PendingIntentIntent的包装。 接收PendingIntent的外部应用程序不知道由PendingIntent包装的Intent的内容。 外国应用程序的任务是在满足某些条件时(例如:按计划报警,或者点击通知)向拥有者返回意图。 条件由所有者提供,但由外国应用程序处理(例如:警报,通知)。

如果外国应用程序发送意图到您的应用程序,意味着外国应用程序知道意图的内容。 和外国的应用程序决定发送意图然后你的应用程序必须处理意图满足一些条件=>您的应用程序获得系统的性能资源。

通过AlarmManager定期开始服务

与活动一样,Android系统可以随时终止服务进程以节省资源。 出于这个原因,你不能简单地在服务中使用TimerTask来确保它定期执行。

因此,要正确调度服务,请使用AlarmManager类。

更新:

所以两者没有实际的区别。 但是,根据是否要确保服务的执行,您可以决定使用什么,对于前者是没有保证的,而对于后者则是如此。

更多信息在AndroidServices 。

在function上,没有区别。

PendingIntent的含义是,你可以把它处理到其他应用程序,以后可以使用它,就好像另一个应用程序是你自己一样。 以下是文档中的相关说明:

通过将PendingIntent提供给另一个应用程序,您授予它执行您所指定的操作的权限,就好像另一个应用程序是您自己的(具有相同的权限和标识)。 因此,您应该小心如何构buildPendingIntent:几乎总是,例如,您提供的基本Intent应该将组件名称明确地设置为您自己的组件之一,以确保它最终被发送到那里和其他地方。

PendingIntent本身就是对由系统维护的令牌的简单描述,该令牌用于检索原始数据。

因此,PendingIntent只是对表示原始Intent(用于创buildPendingIntent)的数据的引用。

另一个简单的不同是,

正常意图将尽快死亡的应用程序死亡。

PendingIntents永远不会死亡。 只要需要警报服务,定位服务或任何其他服务,他们就会活着。