我想知道对Fragment
或Activity
的托管静态引用是否正常?通过托管我的意思是在相关的生命周期回调上释放静态引用。请考虑以下代码:
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
对象的风险?
答案 0 :(得分:7)
我是否存在泄漏Fragment / Activity对象的风险?
是。例如,当您的片段可见时,未处理的异常将绕过您的生命周期方法,导致您无法null
static
字段。
除此之外,还不清楚这会给你带来什么:
托管此片段的活动可以简单地保留常规字段中的片段
活动中的其他片段既不知道也不关心这个片段是否存在(片段应该担心自己及其活动,而不是对等片段)
其他组件,如服务和其他线程,既不知道也不关心整个活动存在,更不用说这个片段(使用事件总线或其他松散耦合的通信模式) )