Android使用组件名称来启动活动

use*_*019 4 android components memory-leaks android-activity

有很多方法可以开始另一项活动.大多数重载方法都要求您传递上下文.

但是当使用componentName来启动活动时

public Intent setComponent (ComponentName component)
Run Code Online (Sandbox Code Playgroud)

和ComponentName的这个构造函数

ComponentName(String pkg, String cls)
Run Code Online (Sandbox Code Playgroud)

您在上面看到,我能够在不使用任何Context参数的情况下启动活动

但它必须在内部以某种方式使用某些"背景",我是对的吗?如果是这样,哪个背景呢?申请一或活动一?这是否意味着每次我使用这两种方法(上面),我都不需要担心内存泄漏,因为我没有传递任何上下文?

谢谢

ada*_*amp 5

在任何一种情况下,您都不必担心内存泄漏,但最好注意传递 Context 对象的位置。当您使用Intent(Context, Class)构造函数或setClass(Context, Class)方法时,Intent 仅使用 Context 参数来查找您的包名称。它们只是方便的方法。


Squ*_*onk 5

adamp的答案是正确的(在我发布之前他已经完成了).

只是为了扩展它,这是Intent(Context packageContext, Class<?> cls)构造函数的来源......

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

...这是ComponentName(Context pkg, Class<?> cls)构造函数的来源

public ComponentName(Context pkg, Class<?> cls) {
    mPackage = pkg.getPackageName();
    mClass = cls.getName();
}
Run Code Online (Sandbox Code Playgroud)

正如adamp所暗示的那样,Intent采用a Context的方法是仅使用它来创建的方法,而这些方法ComponentName只能处理String类型(mPackagemClass).既不是Intent也没有ComponentName提到参考Context.