我有一個活動,在活動中,我只有一個容器佈局和一個帶有自己佈局的片段,並且setRetainInstance爲true。如果保留內存泄漏片段繼續引用它的View元素?
首次創建活動時,我將此片段添加到容器,並且片段具有對片段佈局的視圖對象(例如Button)的引用。
當發生配置更改時,會發生內存泄漏,我不知道View對象是否仍然引用舊的Activity?
我有一個活動,在活動中,我只有一個容器佈局和一個帶有自己佈局的片段,並且setRetainInstance爲true。如果保留內存泄漏片段繼續引用它的View元素?
首次創建活動時,我將此片段添加到容器,並且片段具有對片段佈局的視圖對象(例如Button)的引用。
當發生配置更改時,會發生內存泄漏,我不知道View對象是否仍然引用舊的Activity?
不要保留對舊資源的引用。有時你會發現它們會導致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();
不好。避免使用靜態。 –
@NikolaDespotoski你能說明它爲什麼不好(第二種方法)嗎? – 2016-03-14 14:04:34
不要把舊的資源引用。有時你會發現它們會導致'NullPointerException'崩潰。相反,使所需的字段「靜態」方法(例如'getFeild()')檢查第一個字段是否爲空,然後初始化它,然後返回字段值。 – 2016-03-07 14:04:55