是否有片段或活动的托管静态引用?

时间:2016-11-14 11:21:09

标签: android android-fragments android-activity memory-leaks

我想知道对FragmentActivity的托管静态引用是否正常?通过托管我的意思是在相关的生命周期回调上释放静态引用。请考虑以下代码:

public class StaticReferencedFragment extends Fragment {

    public static StaticReferencedFragment instance;

    public StaticReferencedFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_static_referenced, container, false);
    }

    @Override
    public void onStart() {
        super.onStart();
        instance = this;
    }

    @Override
    public void onStop() {
        super.onStop();
        instance = null;
    }
}

我是否有冒泄漏Fragment/Activity对象的风险?

1 个答案:

答案 0 :(得分:7)

  

我是否存在泄漏Fragment / Activity对象的风险?

是。例如,当您的片段可见时,未处理的异常将绕过您的生命周期方法,导致您无法null static字段。

除此之外,还不清楚这会给你带来什么:

  • 托管此片段的活动可以简单地保留常规字段中的片段

  • 活动中的其他片段既不知道也不关心这个片段是否存在(片段应该担心自己及其活动,而不是对等片段)

  • 其他组件,如服务和其他线程,既不知道也不关心整个活动存在,更不用说这个片段(使用事件总线或其他松散耦合的通信模式) )