2012-02-20 57 views
4

有許多方法可以啓動另一個活動。 大部分重載方法都要求您傳遞上下文。Android使用組件名稱來啓動活動

但在使用組件名稱時,推出使用

public Intent setComponent (ComponentName component) 

,這構造的組件名稱

ComponentName(String pkg, String cls) 

你看上面的,我能夠推出一個活動,而不使用任何上下文參數

活動

但它必須在內部使用某些「上下文」,對嗎?如果是這樣,在哪個環境?申請一個還是活動一個? 這是否意味着每次我使用這兩個方法(上面)時,我不需要擔心內存泄漏,因爲我沒有傳遞任何上下文?

由於

回答

4

你不必擔心在這兩種情況下的內存泄漏,但它是很好的,你關注了你傳遞上下文對象在哪裏。當您使用Intent(Context, Class)構造函數或setClass(Context, Class)方法時,Intent只使用Context參數查找包名。他們只是便利的方法。

0

startActivity()不需要上下文作爲參數;它是一個已經從(或實現)Context派生的類中的方法。那就是 - 如果你沒有一個Context來調用它,你不能調用startActivity()

0

也許我不明白你的問題。但是當你定義意圖時你不使用上下文。您可以使用上下文使用意圖調用組件。例如,您使用:

context.startActivity(intent) 

但通常您會在您的活動和服務中調用這些擴展上下文的方法。因此,你只需使用:

startActivity(intent) 
5

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