不同的Intent构造函数有什么用途?

Spa*_*ost 3 java android android-intent

Intent(String action, Uri uri)
Create an intent with a given action and for a given data url.

Intent(Context packageContext, Class<?> cls)
Create an intent for a specific component.

Intent(String action, Uri uri, Context packageContext, Class<?> cls)
Create an intent for a specific component with a specified action and data.
Run Code Online (Sandbox Code Playgroud)

虽然对某些人来说可能是显而易见的,但是你们能帮助我们这些很难"得到它"的人吗?

例如,在什么情况下我想要1而不是另一个?

Pan*_*mar 6

有两种类型的意图:

  • Explicit intents指定要按名称启动的组件(完全限定的类名).您通常会使用显式意图在您自己的应用中启动组件,因为您知道要启动的活动或服务的类名.例如,响应用户操作启动新活动或启动服务以在后台下载文件.
  • Implicit intents不要命名特定组件,而是声明要执行的常规操作,这允许来自另一个应用程序的组件处理它.例如,如果要向用户显示地图上的位置,则可以使用隐式意图请求另一个有能力的应用程序在地图上显示指定位置.

当您创建显式意图以启动活动或服务时,系统会立即启动Intent对象中指定的应用程序组件.

当您创建隐式intent时,Android系统会通过将intent的内容与设备上其他应用程序的manifest文件中声明的intent过滤器进行比较来找到适当的组件.如果intent与intent过滤器匹配,则系统启动该组件并将其传递给Intent对象.如果多个intent过滤器兼容,系统将显示一个对话框,以便用户可以选择要使用的应用程序.

阅读更多: Intents and Intent Filters


回到你的问题,所有这三个结构都是创建隐式/显式意图的方法.哪里

  • Intent(String action, Uri uri)使用给定的动作和uri 创建隐式意图.

  • Intent(Context packageContext, Class<?> cls) 创造一个明确的意图.

  • Intent(String action, Uri uri, Context packageContext, Class<?> cls) 使用给定的动作和uri创建一个明确的意图.