为什么 Main activity 有一个 intent 过滤器?

Why does the Main activity has an intent filter?

  1. 如果意图过滤器是为了解决隐式意图,那么为什么 MainActivity(这是第一个 activity 即 运行 时 应用已启动)有意图过滤器吗?
  2. 谁向它发送了隐式意图?
  3. 如果发送的隐式意图没有正确的数据怎么办?

嗯,系统怎么知道哪个activity是主要的activity?这不是名字——系统不关心名字。它是 activity,带有表示其主要 activity 的意图过滤器。

它还可以有其他意图过滤器,以您可能想要的任何其他方式启动它。例如,您可能有一个意图过滤器通过深度 link.

启动它

至于正确的数据——如果从应用列表或主屏幕启动,它不会有任何数据。它由应用程序的程序员来确保它可以在这种情况下做一些有意义的事情。

  1. 它有 CATEGORY_LAUNCHER 和 ACTION_MAIN 。 android.intent.action.MAIN 表示此 activity 是应用程序的入口点,即当您启动应用程序时,会创建此 activity。 CATEGORY_LAUNCHER 表示您的 activity 应该显示在顶级启动器中。

https://developer.android.com/reference/android/content/Intent.html#ACTION_MAIN

  1. 启动器向其发送隐式意图。这就是启动器知道点击时要打开哪个 activity 的方式。

  2. 如果您发送不正确的数据,它将无法打开您的 activity。例如: 如果您尝试仅在 startActivity 中使用隐式意图启动主 activity,那么它不会启动,因为有 CATEGORY_DEFAULT 与之关联。您需要在 activity 中再添加一个 intent_filter 来解析意图。