持有 Activity 实例的最安全方法

Safest approach for holding an instance of Activity

什么是 最好和更安全的方法 来持有 Activity

instance
private Activity mActivity;

第一种方法:

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

    mActivity = getActivity();
}

第二种方法:

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.from(getActivity()).inflate(R.layout.fragment_main, container, false);

    mActivity = (Activity) view.getContext();

    return view;
}

在大多数情况下,您不需要捕获 Activity。
但如果你愿意,我的建议是,

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    mActivity = this; 
}

好吧,这取决于。我建议您使用 getActivity()

onAttach(Activity activity)后即可使用。如果您查看 FragmentManager 源代码,您会发现 FragmentmActivity 字段是在调用 onAttach.

之前设置的

但是你要小心,activity 在 onActivityCreated 被调用之前没有完全初始化(视图,..)。