我有一个名为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);,因为这将导致同时修改列表。在内部,它将在列表上进行迭代时从列表中删除某些内容,从而中断迭代器并引发异常。

07-28 03:39