我在Android应用中使用片段。在这些片段中,我需要一个Context对象来重复使用它(大约10次)和一些方法调用。
如您所知,我有两个选择:
选项I:
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;
}
所以,正如你所看到的,在选项II中,mActivity被保留两次,这是浪费内存所以从现在开始我将使用选项I.
感谢您的回答,他们让我理解了这一点:)
答案 0 :(得分:4)
但我认为调用getActivity需要一些CPU处理。
它比你想象的要少。 getActivity只是访问一个字段,获取Activity。它没有太多的CPU涉及。你的第二种方法需要一点内存,首先需要一点堆栈see this来提高性能。
另一方面。如果您在当前代码中没有任何内存问题,则为premature optimization.。
答案 1 :(得分:3)
好吧,看看Android源代码,我可以在Fragment类中找到getActivity()方法的来源:
final public FragmentActivity getActivity() {
return mActivity;
}
所以,正如你所看到的,在选项II中,mActivity被保留两次,这是浪费内存所以从现在开始我将使用选项I.
感谢您的回答,他们让我明白了这个:)
答案 2 :(得分:2)
第二种选择更好。您只能使用一次getActivity()。在第一个选项中,您将多次调用它,这很昂贵。声明动态性会耗费一些内存。由于mActivity不是真正的对象,而是对象的引用,因此它不会占用太多内存。