【问题标题】:Why do we need Intents for transition to new Activity/Service?为什么我们需要 Intent 来过渡到新的 Activity/Service?
【发布时间】:2015-05-28 08:26:19
【问题描述】:

我在一次采访中被问到以下问题:

为什么我们需要 Intent 来启动新的 Activity 或 Service?或者,我们为什么不通过创建一个新对象并调用 activity_obj.onCreate(..); 来启动 Activity;就可以了。

我可以计算诸如传输数据和针对适当活动的意图过滤器之类的意图的好处,但除了我无法得出令人满意的答案。

是否与Activity的生命周期回调处理有关?

【问题讨论】:

  • 是的,它与生命周期密切相关。

标签: android android-intent android-activity


【解决方案1】:

Android 启动活动的方式是通过Zygotes 和大量的 Java 配置。我觉得如果我们要完成所有肮脏的工作配置和启动活动,那将是一个很大的麻烦。通过这种方式,我们可以通过 Intent 进行“系统调用”,将其交给 Android 一段时间并要求它做一些事情。

从安全的角度来看,也意味着每个Activity都是由Android启动的。这意味着您无法启动 Whatsapp,无法共享一些文本,并且无法完全控制它,因为您启动了它。这是非常有益的,如果需要,Android 甚至为您提供了一种与您自己的活动进行交互的方式,通过在同一进程中进行通信。这种沙盒方法是有助于平台安全的要素之一。

【讨论】:

  • 感谢 roarster,这给了我一个开始进一步探索的基础
  • 第一段不正确。垃圾收集器仅被阻止清理由其他(活动)对象引用的对象。在您描述的情况下,如果ActivityA 持有对ActivityB 的引用,则没有什么可以阻止垃圾收集器清理ActivityA
【解决方案2】:

主要原因是这为 Android 提供了一种完全自定义用户体验的简单方法。通过使用“隐式 Intents”,您的应用程序可以告诉 Android 它应该找到一个能够对特定类型的数据执行特定类型的操作的组件(例如,“查看 URL”或“打开 PDF -文档”或“撰写电子邮件”)。您的应用不需要知道要启动哪个组件来执行此操作。事实上,用户可能在他的设备上安装了几个可以执行所需动作的组件,因此这允许 Android 询问用户应该使用哪个组件来执行所需的动作。这使得为​​您设备上的几乎所有应用提供直接替换变得非常容易。

当然,还有 25 种其他方法可以实现这一点。原开发者选择了Intent机制。

【讨论】:

  • 哈哈!我同意最后一行。我也是这么想的。但我猜 Intent 确实通过 Intent-filter 处理了 Action,也可能是 Activity 的生命周期。仍在研究生命周期部分。
猜你喜欢
  • 2019-06-09
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 2017-02-26
  • 2011-04-03
  • 2017-07-27
相关资源
最近更新 更多