Java 为什么上下文被传递给Intent的构造函数?

Java 为什么上下文被传递给Intent的构造函数?,java,android,Java,Android,我试图理解为什么我们要将上下文实例传递给意图构造函数?为什么做新的意图(SomeActivity.class)还不够?安卓是否实施了一些限制 我试图查看代码,但我发现它得到了包名 正如您所猜测的,构造函数中的上下文用于获取应用程序的包名 在SomeActivity.class.getPackage().getName()中从类中推断包名并不适用于所有情况,因为它可能不同于应用程序的包名。正如您所猜测的,构造函数中的上下文用于获取应用程序的包名 从类中推断包名,如在SomeActivity.cla

我试图理解为什么我们要将
上下文
实例传递给
意图
构造函数?为什么做
新的意图(SomeActivity.class)
还不够?安卓是否实施了一些限制

我试图查看代码,但我发现它得到了包名


正如您所猜测的,构造函数中的
上下文
用于获取应用程序的包名


SomeActivity.class.getPackage().getName()
中从类中推断包名并不适用于所有情况,因为它可能不同于应用程序的包名。

正如您所猜测的,构造函数中的
上下文
用于获取应用程序的包名


从类中推断包名,如在
SomeActivity.class.getPackage().getName()
中所示,并不适用于所有情况,因为它可能与应用程序的包名不同。

要明确标识Android应用程序中的活动,您需要同时拥有应用程序的名称(又名Android应用程序包)和活动的全名(java包名+活动类的类名)。这正是您在构造函数中给出的两个参数。上下文用于获取Android应用程序包名,类用于获取完整类名


具有相同全名的活动可以在两个应用程序中使用。如果不提供上下文,则Android将不知道该活动属于哪个应用程序。

要明确标识Android应用程序中的活动,您需要同时具有应用程序的名称(又称Android应用程序包),以及活动的全名(java包名+活动类的类名)。这正是您在构造函数中给出的两个参数。上下文用于获取Android应用程序包名,类用于获取完整类名


具有相同全名的活动可以在两个应用程序中使用。如果您不提供上下文,则Android将不知道该活动属于哪个应用程序。

在此上下文中,我想问,如果要启动的另一个活动在同一项目的不同包中,该怎么办?那么它将如何成功?@plup\u-france则您有相同的应用程序活动包+完整活动名称(活动包名称+活动类名)。好的,那就确认一件事。假设您在com.example.sample1中有一个名为Activity1的活动,并且您打算在com.example.sample2中启动名为Activity2的活动。考虑到实际遵循的过程,下面是我理解的情况:ActivityManager获取调用包的名称活动存在于中,然后解析该字符串以检索com.example部分。然后将其附加到被调用活动的名称中。或者更确切地说,如果该活动位于不同的包中,我们必须在清单文件中显式指定它,这就是ActivityManager用于查找该活动的位置。它是哪一个?@pill_虚构应用程序包活动的java包是两个不同的东西。Intent有两个:应用程序包(在android清单文件中定义)和活动的java包。ActivityManager首先获取应用程序包,找到活动所在的应用程序,然后按全名(java包+类名)搜索活动。在这种情况下,我想问,如果要启动的其他活动在同一项目的不同包中,该怎么办?那么它将如何成功?@plup\u-fiction那么您有相同的应用程序包+完整的活动名称(活动包名称+活动类名)。好的,那就确认一件事。假设您在com.example.sample1中有一个名为Activity1的活动,并且您打算在com.example.sample2中启动名为Activity2的活动。考虑到实际遵循的过程,下面是我理解的情况:ActivityManager获取调用包的名称活动存在于中,然后解析该字符串以检索com.example部分。然后将其附加到被调用活动的名称中。或者更确切地说,如果该活动位于不同的包中,我们必须在清单文件中显式指定它,这就是ActivityManager用于查找该活动的位置。它是哪一个?@pill_虚构应用程序包活动的java包是两个不同的东西。Intent有两个:应用程序包(在android清单文件中定义)和活动的java包。ActivityManager首先获取应用程序包,找到活动所在的应用程序,然后按全名(java包+类名)搜索活动。