【发布时间】:2014-01-05 23:12:01
【问题描述】:
我在我的 Android 应用中使用 Fragments。在这些片段中,我需要一个 Context 对象,以便通过一些方法调用重复使用它(大约 10 次)。
如你所知,我有两个选择:
选项一:
public class MyFragment extends Fragment{
public void onCreate(Bundle savedInstanceState){
super(savedInstanceState);
//call a lot of methods and use getActivity() a lot of times
}
}
选项二:
public class MyFragment extends Fragment{
private Activity mActivity;
public void onCreate(Bundle savedInstanceState){
super(savedInstanceState);
mActivity = getActivity();
//call a lot of methods and use mActivity
}
}
我知道声明 mActivity 字段需要一些内存(多少?),但我认为调用 getActivity 需要一些 CPU 处理。
这两个选项哪个更好,为什么?
编辑:
嗯,查看Android源代码我可以找到Fragment类中getActivity()方法的来源:
final public FragmentActivity getActivity() {
return mActivity;
}
所以,如您所见,在 Option II 中 mActivity 被保留了两次,这很浪费内存,所以从现在开始我将使用 Option I。
感谢您的回答,他们让我明白了这一点:)
【问题讨论】:
-
声明该字段将花费您全部...我认为 8-12 个字节。并且让您不必每次都拨打
getActivity()。不过,我不确定如果应用程序未腌制,它会有多可靠。 (希望一切都能正确重新创建……但是,我不了解 Android。)如果您只想使用onCreate中的活动,我会将变量设为本地变量。 -
就性能而言,实际上并没有太大区别。所以除非你真的想尽可能地减少内存/cpu,否则只需调用 getActivity()。它更具可读性。
标签: android performance memory field cpu