2014-01-15 29 views
1

的時候我一直在開發Android應用程序很多時候,爲了獲得一些重要的變量,例如getApplicationContext()或其他變量,如按鈕Edittexts,這是正常MainActivity相同項目在其它的類需要外部訪問,我一直在使用這種技術,就是聲明中MainActivity變量靜態和從其他類訪問它們

在MainActivity(對於getApplicationContext()的情況下)

private static Context context = null; 

的onCreate方法內,我做的:

context = getApplicationContext(); 

,然後我訪問上下文(顯示一個烤麪包消息,例如)通過使用:

Toast.makeText(MainActivity.context,"Message",Toast.LENGTH_LONG).show(); 

在我的其他班。類似於得到設置文本中的一個EditText變量等。

我的問題是:

1)這是我的問題定義的最佳方法是什麼?

2)如果否,有沒有更好的方法?

3)如果否,這種技術的缺點是什麼?

3)是否可以將相同的技術擴展到函數的主要性?

編輯:我做需要其他活動在這裏,而我只是分裂應用程序的任務分成單獨類(或對象)。

+0

什麼*究竟*你的意思是「靜態類」?在Java中,「靜態類」只是指嵌套類型,它不*意味着該類未被實例化。假設'MainActivity'實際上是一個活動,它*將被實例化...... –

+0

好吧,那個部分是錯的(我已經編輯過),但是這個方法到目前爲止都是完美的。基本上MainActivity是一個類,其功能* OnCreate *是Android應用程序執行開始的地方。一般來說,MainActivity不是*顯式*實例化的。 – SoulRayder

回答

3

我的問題是:

1)這是我的問題定義的最佳方法?

不,這不是解決這個問題的最好方法。

2)如果否,有沒有更好的方法?

是來拯救你應該使用像一個無頭的片段靜態信息,使得Android框架可以處理未使用的類和數據

3)如果沒有垃圾收集,什麼是這種技術的缺點是什麼?

缺點很多:)首先是內存泄漏導致靜態變量不能被垃圾收集,所以它留在內存中。 其次,你不應該使用其他地方主要活動的編輯文本,因爲沒有保證主要活動仍然存在,因爲如果你離開它,android可能會殺死它以節省內存。 所有的屏幕應該是獨立的,數據必須以intents和bundles傳輸()

3)相同的技術可以擴展到主要功能嗎?

創建獨立的助手類,坐在像助手一樣的靜態類。 MainActivity不是一個靜態類,不應該是一個靜態類

+0

感謝您的回覆和有用的答案。請檢查我的編輯並告訴我,在這種情況下,方法OK,因爲在這種情況下我不需要任何意圖。 – SoulRayder