gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:11 25 4
gpt4 key购买 nike

我有一个 ListFragment,它会通过 ArrayAdapter 显示项目列表,我正在尝试处理配置更改(设备旋转)我觉得将 Activity 上下文传递给 Array Adapter 可能会在 Activity 在旋转和 ListFragment 适配器上重新启动时导致内存泄漏被保留是因为我正在使用 setRetainInstance(true),有人可以告诉我我的理解是否正确吗?如果是这样,处理这个问题的最佳方法是什么。是的,我不想让我的适配器 onDetach 无效并在重新创建 fragment View 后重新使用它。

    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);

}

最佳答案

Fragment 将被保留(因此不会被垃圾回收)。 Fragment 将持有对适配器的引用,而适配器持有对 Activity Context 的引用,所以是的,我相信这会导致内存泄漏。

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

关于android - 使用 setRetainInstance(true) 将 Context 传递给 Fragment 内的 ArrayAdapter 会导致泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18896880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com