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 次 |
| 最近记录: |