2014-04-04 35 views
0

我是Android的新手,当我搜索发送短信的代码时,我发现他使用了一个未决的意图并开始学习它,我研究了它被第三方应用程序用来启动意图,并且它也采取行动在未来,但我不明白这些工作如何?无论如何,将来每当一个挂起的意图被调用时,它会调用一个意图,所以为什么我们不直接去意图?为什么我不能去意图而不是等待意图?

我希望这个问题是清楚的,所以如果可能的话请给我一份有意向的工作和即将意向请dont't解释我再次定义的例子....

回答

1

为什么我不能去意图而不是等待意图?

您需要提供PendingIntent的原因,而不是Intent

1)让我们假设你为了使该应用程序会以某种方式使用它(例如给其它应用程序中Intent - 系统通知管理器是另一种应用)。现在想想看 - 如果这个应用程序知道这个意图是为了启动Activity还是打算开始Service或发送brodcast?回答:它不能!你可能会认为它可以基于类参数知道,但不要忘记,它也可能启动implicit Activities /服务!

结论:其他应用程序无法知道该Intent的具体内容,但不知道它打算如何处理。这就是为什么在创建PendingIntent时使用getBroadcast()getActivity()getService()方法创建PendingIntent的原因。

这是PendingIntent的全部内容之一:封装Intent +如何处理它。

2)让我们假设一段时间后,你想提供给另一个应用Intent。现在,有2个选项:

  • 新的意图应该替换您提供
  • 新的意图不应该取代以前的前一个..

将如何接收应用程序就知道了哪一个来自两个?

回答:挂起的意图由系统持有并创建,并通过向另一个相同的请求代码提供挂起的意图filter equal - 将自动替换上一个而不创建新的。 3)让我们假设对意图的引用是由应用程序直接保存和创建的,而不是由系统(如我在'2'中写的)创建的。现在想象一下这样的场景:

3.1)您的应用程序创建的意图对象

3.2)应用程序到另一个applciation

3.3)你的应用程序从某种原因

停止提供参考这一意图对象3.4)WTF应该发生?引用由另一个应用程序保存的应用程序对象?这对GC来说是一团糟。系统无法释放您的进程内存分配!

这是场景挂起的意图实例背后的第二个原因,它只由系统持有,而不是由您的特定应用程序持有。

,如果它是不够的 - 而且也有安全的,我不打算写你的使用示例中的问题...

,因为任何谷歌搜索的PendingIntent turorial会用很好的例子色调效果,无论如何 - 对于特定的用例,代码会有所不同...

+0

我喜欢你解释事物的方式,但坦率地说我无法理解一些场景,这不是你的叙述故障,因为我在android中的知识有限,我刚开始使用android,所以我是一名新程序员,所以你能建议我如何在学习android的专业知识,我发现在android.developers网站很多信息,但我不明白他们的内容,所以你能以正确的方式引导我? –

+1

@srujanmaddula:在我的回答中,我假设你理解并知道android构建块:Service,Activity,BroadcastReceiver和Intent。这是框架中最基本的重要组成部分。了解这些组件和生命周期可以让你快速掌握android的专业知识。所以,我最好的建议是挖掘这些组件并理解它们。参考 - http://developer.android.com/guide/components/fundamentals.html –

0

主要区别在于,即使拥有的应用程序的PendingIntent进程被终止,PendingIntent本身仍然可以从其他进程使用。 如果稍后创建的应用程序重新获取相同类型的PendingIntent,它将收到一个表示相同的PendingIntent,如果它仍然有效,并且还可以调用cancel()将其删除(实际上是前一个)。