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类型(mPackagemClass)。 IntentComponentName都没有引用Context

+0

谢谢先生!如果我被允许,我会接受你的答案。但无论如何,感谢您的源代码..现在很清楚。 – user1118019 2012-02-22 02:10:49

+0

+1 – 2013-11-16 11:23:51