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参数的情况下启动活动
但它必须在内部以某种方式使用某些"背景",我是对的吗?如果是这样,哪个背景呢?申请一或活动一?这是否意味着每次我使用这两种方法(上面),我都不需要担心内存泄漏,因为我没有传递任何上下文?
谢谢
在任何一种情况下,您都不必担心内存泄漏,但最好注意传递 Context 对象的位置。当您使用Intent(Context, Class)
构造函数或setClass(Context, Class)
方法时,Intent 仅使用 Context 参数来查找您的包名称。它们只是方便的方法。
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
类型(mPackage
和mClass
).既不是Intent
也没有ComponentName
提到参考Context
.
归档时间: |
|
查看次数: |
6817 次 |
最近记录: |