Android 将活动实例保存在片段中

Android 将活动实例保存在片段中,android,Android,Fragment有一个名为getActivity()的方法,该方法返回片段当前关联的活动 不使用此方法,而是将Activity实例保存在onAttach(Activity)方法中是否安全 例如,更改为: public class MyFragment extends Fragment { public void foo() { ((MainActivity) getActivity()).foo(); } } 致: 这两种方法之间有什么区别吗?哪个更好 第二种方

Fragment
有一个名为
getActivity()
的方法,该方法返回片段当前关联的活动

不使用此方法,而是将
Activity
实例保存在
onAttach(Activity)
方法中是否安全

例如,更改为:

public class MyFragment extends Fragment {
    public void foo() {
        ((MainActivity) getActivity()).foo();
    }
}
致:

这两种方法之间有什么区别吗?哪个更好


第二种方法的一个好处是,您不必每次使用活动时都进行类型转换(如
(MainActivity)getActivity()
)。但是我不知道保存活动实例是否安全。

可以。我这样做几乎总是为了避免每次调用方法getActivity()和强制转换结果(为了更好的性能和更好的代码)

同样的事情。不过,在onAttach()中保存对活动的引用可能更为优雅,以防您想要将某些信息反馈给该活动。
public class MyFragment extends Fragment {
    private MainActivity activity;
    public void onAttach(Activity activity) {
        this.activity = (MainActivity) activity;
    }
    public void foo() {
        this.activity.foo();
    }
}