创建意图的方法:

noo*_*oot -2 android android-studio

我知道有两种方法可以创建Intent,它们是:

Intent intent = new Intent(this, Activity2.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

Intent intent = new Intent();
intent.setClassName(com.example.android.somepackagename, com.example.android.somepackagename.Activity2);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

我知道两者基本上都做同样的事情,想知道是否有任何幕后差异,如果有特殊情况我们只需要使用一种类型.

谢谢

Com*_*are 8

我知道两者基本上都是一样的

不,他们完全一样......如果com.example.android.somepackagename是你自己的包裹.

双参数构造函数的实现是:

public Intent(Context packageContext, Class<?> cls) {
    mComponent = new ComponentName(packageContext, cls);
}
Run Code Online (Sandbox Code Playgroud)

执行setClassName()是:

public Intent setClassName(String packageName, String className) {
    mComponent = new ComponentName(packageName, className);
    return this;
}
Run Code Online (Sandbox Code Playgroud)

他们都设定了ComponentName.如果你进入ComponentName源代码,那么Context只需要调用getPackageName()Context并使用它String.

setClassName()可以用来创建一个Intent标识单独包中的组件,Intent构造函数不能.这是相对不常见的,因为我们通常使用隐式Intents(例如new Intent(Intent.ACTION_VIEW, uri))来查找和调用其他应用程序中的组件.