2012-02-10 41 views
15

要開始,你需要一個意圖,就像一個活動:使用情境啓動另一個活動

Intent i = new Intent(context, class) 

所以,填補了環境參數,一對夫婦的選項可供選擇:

  • 使用MyActivity.this或只是this
  • 使用getApplicationContext()
  • 使用getBaseContext()

我相信還有一兩個選項。 這些選項都出現在某種教程中,一個使用第一個,下一個使用第三個選項。

那我應該使用哪一個?它甚至重要嗎?對於不同的情況是不同的嗎?

回答

14

有其不同的情況不同,

這取決於範圍。假設如果要在全局類中創建方法extendsApplication以創建在Application的每個類中都使用的Toast,則可以使用getApplicationContext()來創建它。

如果你想創建一個僅限於特定活動視圖,您可以使用Activity.this

另外如果你想在一些內部類來創建一個AlertDialog說AsyncTask,那麼你必須使用Activity.this,因爲AlertDialog將被鏈接到Activity本身。

也不要使用getBaseContext()只是使用您正在使用的Context。爲了獲得更多信息,你可以看到this Answer

因此,真正的問題的答案是更好地使用Activity.this開始新的Activity

Intent intent = new Intent(Current_Activity.this, Calling.class); 
startActivity(intent); 
-1

你不喜歡這樣....

Intent intent = new Intent(); 
intent.setClass(MainActivity.this, SecondActivity.class); 
startActivity(intent); 
+0

我猜OP知道SmartLemon :) – 2012-02-10 12:38:31

+0

請回答,而不只是第幾(?)的話之前,先閱讀整個問題:) – nhaarman 2012-02-10 12:40:19

+0

我看過整個事情的問題得到回答,您可以使用活動。這如上所示。 – FabianCook 2012-02-10 12:41:40

4

他們肯定不同。這些是不同的上下文,應該儘可能少地使用範圍(上下文)。

例如,如果我們可以使用Activity的Context而不是ApplicationContext,則應該使用活動上下文,同樣適用於應用程序上下文和基礎上下文。

+1

這是真的,但不適用於'getBaseContext'。 'getBaseContext'是'ContextWrapper'類的一個方法。開發人員無法明確地知道使用它包裝了哪個上下文。 – Olegas 2012-02-10 12:40:57

+0

這很有道理,但我很好奇這個格言的「爲什麼」。從另一個活動或應用程序上下文開始一個活動之間有什麼功能差異嗎? – 2017-11-07 19:50:37

相關問題