2016-03-07 36 views
1

我有一個活動,在活動中,我只有一個容器佈局和一個帶有自己佈局的片段,並且setRetainInstance爲true。如果保留內存泄漏片段繼續引用它的View元素?

首次創建活動時,我將此片段添加到容器,並且片段具有對片段佈局的視圖對象(例如Button)的引用。

當發生配置更改時,會發生內存泄漏,我不知道View對象是否仍然引用舊的Activity?

+0

不要把舊的資源引用。有時你會發現它們會導致'NullPointerException'崩潰。相反,使所需的字段「靜態」方法(例如'getFeild()')檢查第一個字段是否爲空,然後初始化它,然後返回字段值。 – 2016-03-07 14:04:55

回答

0

不要保留對舊資源的引用。有時你會發現它們會導致NullPointerException崩潰。相反,使所需字段靜態方法(例如getFeild())檢查第一個字段是否爲空,然後初始化它,然後返回字段值。

例(壞)

public class MainActivity extends Activity { 
    public SomeType myImportantObj; 
} 
... 
//in another place 
Object o = mainActivity.myImportantObj; // this could be null !! 

public class MainActivity extends Activity { 
} 

public class SomeType { 
    private static SomeType instance; 
    public static SomeType getInstance() { 
     if (instance == null) instance = new SomeType(); 
     return instance; 
    } 
} 
... 
//in other place 
Object o = SomeType.getInstance(); 
+0

不好。避免使用靜態。 –

+0

@NikolaDespotoski你能說明它爲什麼不好(第二種方法)嗎? – 2016-03-14 14:04:34