使用setRetainInstance(true)将Context传递给Fragment中的ArrayAdapter会导致泄漏吗?

May*_*hta 9 android memory-leaks android-arrayadapter android-fragments android-activity

我有一个ListFragment,它将通过ArrayAdapter显示项目列表,我正在尝试处理配置更改(设备轮换)我觉得将活动上下文传递给Array Adapter可能会导致在轮换时重新启动Activity时出现内存泄漏并且保留ListFragment适配器,因为我正在使用setRetainInstance(true),有人可以告诉我,如果我的理解是真的吗?如果是这样,处理这个问题的最佳方法是什么.是的,我不想在我的适配器onDetach上取消它,并在重新创建片段视图后重复使用它.

    public class DummyXListFragment extends RoboSherlockListFragment{

        @Override
        public void onCreate(Bundle savedInstanceState) {   
             super.onCreate(savedInstanceState);
             setRetainInstance(true);   
         }   

         @Override
         public void onActivityCreated(Bundle savedInstanceState) {
             super.onActivityCreated(savedInstanceState);


            if (adapter == null)
            adapter = new DummyItemAdapter(getActivity(),
                android.R.layout.simple_list_item_1, list);

    }
Run Code Online (Sandbox Code Playgroud)

Ale*_*ood 17

的Fragment将被保留(并且因此将不被垃圾收集).在Fragment将举行的适配器参考,适配器保持到活动的参考Context,所以是的,我相信,这将导致内存泄漏.

一个非常简单的解决方案是传递getActivity().getApplicationContext()给适配器构造函数.