Android使用组件名称来启动活动
有许多方法可以启动另一个活动。 大部分重载方法都要求您传递上下文。Android使用组件名称来启动活动
但在使用组件名称时,推出使用
public Intent setComponent (ComponentName component)
,这构造的组件名称
ComponentName(String pkg, String cls)
你看上面的,我能够推出一个活动,而不使用任何上下文参数
活动但它必须在内部使用某些“上下文”,对吗?如果是这样,在哪个环境?申请一个还是活动一个? 这是否意味着每次我使用这两个方法(上面)时,我不需要担心内存泄漏,因为我没有传递任何上下文?
由于
你不必担心在这两种情况下的内存泄漏,但它是很好的,你关注了你传递上下文对象在哪里。当您使用Intent(Context, Class)
构造函数或setClass(Context, Class)
方法时,Intent只使用Context参数查找包名。他们只是便利的方法。
startActivity()
不需要上下文作为参数;它是一个已经从(或实现)Context派生的类中的方法。那就是 - 如果你没有一个Context来调用它,你不能调用startActivity()
。
也许我不明白你的问题。但是当你定义意图时你不使用上下文。您可以使用上下文使用意图调用组件。例如,您使用:
context.startActivity(intent)
但通常您会在您的活动和服务中调用这些扩展上下文的方法。因此,你只需使用:
startActivity(intent)
adamp的回答是正确的(他在我发布之前已经明白了)。
只是为了上这个扩展是为Intent(Context packageContext, Class<?> cls)
构造源...
public Intent(Context packageContext, Class<?> cls) {
mComponent = new ComponentName(packageContext, cls);
}
...这是ComponentName(Context pkg, Class<?> cls)
构造
public ComponentName(Context pkg, Class<?> cls) {
mPackage = pkg.getPackageName();
mClass = cls.getName();
}
源作为adamp所暗示的, Intent
采用Context
的方法只是用于创建ComponentName
的便利方法,而ComponentName
只适用于String
类型(mPackage
和mClass
)。 Intent
和ComponentName
都没有引用Context
。
谢谢先生!如果我被允许,我会接受你的答案。但无论如何,感谢您的源代码..现在很清楚。 – user1118019 2012-02-22 02:10:49
+1 – 2013-11-16 11:23:51