Android & OOP - 全局变量 vs 继承的 Getter 在 Fragments 中

5
在一个Fragment中,每次需要引用Activity时,应该调用getActivity()还是创建全局变量'mActivity'并使用它?
基本上,您已经拥有一个Activity对象(getActivity()),创建全局变量(mActivity)感觉像代码重复,并且创建了不必要的额外引用。 但是,在每个地方都使用getActivity()看起来很糟糕,并且每次进行多个方法调用感觉不正确(性能?)。
 // Pseudo Android
 public class MyFragent extends Fragment {

      private Activity mActivity; // Global

      public void onActivityCreated(Bundle b){

          mActivity = getActivity();

      }

      public void onClick(View v){

         randomMethodTakingActivity(mActivity);
         // or
         randomMethodTakingActivity(getActivity());

      }

      private void someMethod(){
         randomMethodTakingActivity(mActivity);
         // or
         randomMethodTakingActivity(getActivity());
      }

      private void anotherMethod(){
         mActivity.someCallback();
         // or
         getActivity().someCallback();
      }

 }

这也与getApplication()或getView()相关。

我已经阅读了编写性能优化代码,但没有找到相关内容。我想了解面向对象的性质以及性能方面的反馈(尽管可能可以忽略不计)。

2个回答

6
在Fragment中,您应该每次需要引用Activity时调用getActivity(),而不是创建全局变量'mActivity'并使用它。
调用getActivity()。首先,如果您使用setRetainInstance(true),则您的替代方法是完全错误的--在配置更改后,您将指向错误的Activity。
绝对是这样的。
如果您会在紧密循环中调用它一百万次,请为临时缓存创建一个局部变量。否则,性能损失应该不会很大。
或者,另一种看待它的方式是,如果Traceview显示您调用getActivity()的时间太长,请担心它。

现在可以看到使用getActivity()来处理屏幕方向变化的好处了。你对getView()有什么看法吗?说实话,为了保持一致性,我可能会对它们都进行方法调用,感谢你的建议。 - Blundell
@Blundell:“你对getView()有什么看法吗?”——通常情况下,除非我有明确的原因(例如,百万次循环),否则我会使用内置方法。 - CommonsWare
否则,性能影响不应该很大。 - Hamzeh Soboh

0
你知道GOF(四人帮)设计模式吗? 我认为你的问题已经在工厂方法模式中得到解决了。

我认为工厂设计模式在这里并不相关。你期望传递什么给工厂?然后返回应用程序? - Blundell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接