2011-02-09 51 views
3

我正在處理由其他人編寫的現有Android代碼,它有幾個內存問題。我無法理解的一個問題是這個。在主Activity類中,它有一個名爲getReference()的靜態方法。 此方法基本上返回對稱爲mThis的變量的引用。現在,在的onCreate方法有靜態參考的活動

class MyActivity extends Activity 
{ 
    private static MyActivity mThis;  
    public MyActivity getReference(){ 
      return mThis; 
    } 
    public onCreate(Bundle savedInstanceState){ 
     mThis = this; 
    } 

    ... 
} 

現在,在內容提供商或從Dialog類的繼承類,它使用這種靜態方法來獲取參考上下文。

我敢肯定,這是不正確的,是內存泄漏的原因之一。但是有沒有一種方法可以獲得當前的上下文,而不需要在每個類中傳遞上下文對象。有一個應用程序上下文,但我不認爲它有任何方法來獲取當前上下文。

我可以刪除此方法,然後將對上下文對象的引用傳遞給這些類。但有沒有其他方法可以解決這個問題。

回答

8

我很確定這是不正確的,是內存泄漏的原因之一。

是的。

但是有沒有一種方法來獲取當前的上下文,而不需要在每個類中實際傳遞上下文對象。

沒有「當前上下文」。請提供Context到任何需要的方法。例如,您會注意到Android SDK的這種設置方式非常多。

+0

靜態引用始終指向最後創建的活動,它如何泄漏內存? – auval 2012-08-15 08:42:30

0

創建ContentResolver和對話框時,上下文已經在構造函數中傳遞,所以我沒有看到需要使用該方法。在其他課程中使用的是什麼?