什么是Intent中的packageContext#(Context packageContext,Class <?> cls)?

该文件说:

packageContext实现此类的应用程序包的上下文。

但是这是什么意思? 哪个class级是“这个class级”?

为什么new Intent(this,XXX.class)作品?

Solutions Collecting From Web of "什么是Intent中的packageContext#(Context packageContext,Class <?> cls)?"

您可以传递您从任何应用程序的类中获取的任何Context对象。 所以你可以使用一个Activity,Service对象,或者你可以调用getApplicationContext()并将返回的Context对象传递给Intent的构造函数。

将上下文视为应用程序的状态。 它用于操纵应用程序使用的资源和服务,如数据库,本地文件,类加载器,共享首选项等。

当有人打电话给你,问你的时间是什么,你说的第一件事是什么? 或者这个谈话的背景是什么? 根据具体情况,您可以决定是否值得继续拨打电话。 如果你继续进行,那么对话应该相对容易,因为你已经知道上下文。

Intents也一样。 什么是意图? 有意向的东西 – 其中之一是开始一个活动。

 Intent intent = new Intent(getApplicationContext(),ActivityTwo.class); startActivity(intent); 

如果这使得你的概念比让我们继续你的问题和实际的API更清晰一点 –

 Intent#(Context packageContext, Class<?> cls) 

正如你所知道的,第一个参数应该是types的Context ,我们知道它是一个抽象类。 通常,您可以传递任何扩展Context类的具体类 – Activity类是其中的一个(在这种情况下,您只需在参数中使用this )。

在这里输入图像说明

我认为这是与实现当前类的应用程序包相关的上下文。

例如,如果您处于一个狗类中,并且具有以下包结构com.mycompany.dogfinder.dog,则包上下文将引用与实现dog类的包关联的上下文。 在这种情况下,与dog类关联的上下文将是与com.mycompany.dogfinder应用程序包相关的上下文。

这让我花了一点时间来弄清楚正在说什么,但我认为这就是它的意思。

从活动开始活动:

  public SomeActivity extends Activity{ ... private startAnother(){ Intent intent = new Intent(getApplicationContext(), AnotherActivity.class); startActivity(intent);// works fine getApplicationContext().startActivity(intent)//works too, //but flag Intent.FLAG_ACTIVITY_NEW_TASK needed and new you will get //backstack offcourse } ... } 

意图只使用上下文来创buildComponentName:

  public Intent(Context packageContext, Class<?> cls) { mComponent = new ComponentName(packageContext, cls); } // Identifier for a specific application component public ComponentName(Context pkg, Class<?> cls) { mPackage = pkg.getPackageName(); mClass = cls.getName(); }