我有一个名为mHomeworks的数组。对于onResume,我致电:
public void onResume() {
super.onResume();
((HomeworkAdapter)getListAdapter()).notifyDataSetChanged();
mHomeworks = HomeworkLab.get(getActivity()).getHomework();//update list
}
关于内存管理,我应该打电话给:
mHomeworks.removeAll(mHomeworks);
mHomeworks = null;
最佳答案
没有引用的任何对象都可以进行垃圾回收,而无需执行任何操作。因此,通常,mHomeworks = HomeworkLab.get(getActivity()).getHomework();
很好,因为它将清除对旧对象的引用并允许回收内存(假定在其他任何地方都没有引用)。
例外是,如果mHomeworks在新分配之前和之后都消耗了大量的可用内存。在新的分配发生之前,旧的内存将无法进行垃圾回收,因此两个对象将需要同时短暂地在内存中。如果没有足够的内存,这可能会导致速度降低或抛出OutOfMemory异常。在这种情况下,mHomeworks = null;
足以释放内存。当然,您可能需要拥有非常大的清单,这一点很重要。
您绝对不想做的是mHomeworks.removeAll(mHomeworks);
,因为这将导致同时修改列表。在内部,它将在列表上进行迭代时从列表中删除某些内容,从而中断迭代器并引发异常。