我想知道 androids 垃圾收集器如何处理片段(保留实例)保存的数据。
如果我有这样的班级层次结构:
class MyFragment extends Fragment {
private DataManager dataManager;
public MyFragment(){
setRetainInstance(true);
}
public void onCreate(){
if (dataManager == null)
dataManager = new DataManager();
dataManager.setView(this);
}
public void onCreateView(){
// display the data of the dataManager
}
public void onStop(){
dataManager.setView(null);
}
}
class DataManager implements DataChangedListener {
private MyFragment view;
private Data data;
public DataManager(){
data.setDataChangedListener(this);
}
public void setView(MyFragment v){
this.view = v;
}
}
class Data {
public void setDataChangedListener(DataChangedListener l){
this.listener = l;
}
}
所以我想要做的是,在orientation
更改片段视图内容时将重新创建。但基础数据(DataManager
和数据)不得重新加载。侦听数据对象的DataManager
更改,并将此更改转发到 UI Fragment
,. Fragment
被“附加”到DataManager
它(重新)创建的时间。
到目前为止,一切都很好。在我看来,这是一个很好的解决方案并且结构良好。基本上它是某种模型-视图-演示者模式。
但现在我想知道,Android 何时会运行垃圾收集器来收集DataManager
数据对象。
假设我有一个显示MyFragment
.
但是,当应用程序的用户导航到另一个 Activity 时,内存会发生什么,显示的东西完全不同。
由于有DataManager
对 Data 的引用,反之亦然,我猜数据将“永远”保存在内存中,对吧?所以我猜垃圾收集器只会在设备内存不足时删除它。但我想,这两个对象不会自动成为垃圾收集的前两个数据对象。我想有某种“内存死锁”。
你怎么看?有什么建议么?