2011-11-01 46 views
1

我粘貼一些部分我的代碼在這裏:關於Android的背景下

public void onCreate(Bundle savedInstanceState) { 
     Log.e("Main Activity", "OnCreate"); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_frame); 

     //GlowEffect is the custom class's constructor:GlowEffect(context); 
     new GlowEffect2(getApplictionContext()); 

     AlertDialog.Builder builder = new Builder(this); 
... 
... 

我發現,當我改變**Builder(this)**參數去Builder(getApplicationContext()); 該應用程序會崩潰!而GlowEffect2的構造函數運行良好,無論參數是「this」還是"getApplicationContext()". 那麼之間的差異兩個參數之間呢?

回答

3

正如您所注意到的,Builder的constructor需要一個Context對象作爲參數。

活動和應用程序對象都是上下文的子類,因此要麼是創建構建器的有效參數。

對象 - > - >環境ContextWrapper - >應用程序
對象 - > - >環境ContextWrapper - > ContextThemeWrapper - >活動

什麼是應用程序和活動之間的區別?我覺得最明顯的區別之一是它們的生命週期:

  • 活動將生活,只要UI的特定部分正在運行,並且將被銷燬,並在各種情況下重建,例如改變方向,或者當活動未被查看時,Android OS需要通過銷燬未被查看的活動來釋放一些內存。

  • 應用程序只要應用程序本身正在運行就會存活。

至於你的具體問題,崩潰的堆棧跟蹤是什麼?這questiongetApplicationContext()可能爲空,因爲應用程序仍在啓動,而活動正在創建(答案說,問題已在Android OS 1.6中解決)。

+0

謝謝你的回答。是的,我也認爲也許「getApplicationContext()」爲空,但爲什麼「GlowEffect2(getApplicationContext())」是OK?!(PS:在GlowEffect2中我在Context中使用「TextView tv =新的TextView(上下文)「)。所以我仍然不明白爲什麼? –

+0

您需要從崩潰中提供堆棧跟蹤,並告訴我們它指向哪個源代碼行。您還應該添加日誌以在不同階段輸出getApplicationContext()以確定它何時爲空。也許有一個計時問題,意味着在GlowEffect2代碼運行時存在getApplicationContext()? –